前言

本篇AJAX基础教程,只讲干货,拒绝废话。

全文通过两个实例来讲解AJAX的基本用法,第1个实例是使用AJAX技术从服务器获取纯文本(HTML)数据,

第2个实例是获取从服务器PHP文件的数据。

注意:必须在服务器环境下在才能运行AJAX程序,本文使用的WAMP

准备知识可不看,有一点基础直接跳到实例部分也能理解,代码中都有详细注释。

准备知识

掌握AJAX技术的核心是理解XMLHttpRequest这个对象,它是一个JavaScript对象。下面简单介绍下它

的属性和方法。

属性

readyState

表示请求当前的状态,共有5个值,含义分别如下:

0 = uninitialized

1 = loading

2 = loaded

3 = interactive

4 = completed

这里我们只关注第4个状态,代表向服务器发送的请求已经完成(不代表成功)。

onreadystatechange

这是一个事件属性,就像onclick单击事件一样,readyState的值一旦变化,就会触发这个事件。

status

表示HTTP请求的状态码,值为200时表示请求成功。

responseText

以字符串的形式返回从服务器请求的数据。

方法

open('GET/POST', 'URL')

GET与POST 2选1,URL表示要从服务器请求文件的地址。

send(content)

向服务器发送数据,请求方法为POST时会用。

实例1 从服务获取HTML文件的数据

需要2个文件放在WAMP的WWW目录下通过,浏览器localhost运行即可。

文件1: apples.html

文件2: k1.html

<!-- filename: apples.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p style="color: red">hello world</p>
<p>你看到的信息来自外部文件apples.html</p>
</body>
</html>
<!-- filename: k1.html -->
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Ajax示例</title>
</head>
<body>
<div>
<button>Apples</button>
</div> <div id="target">
Press a button
</div> <script>
(function() {
var buttons = document.getElementsByTagName("button")[0];
buttons.addEventListener("click", handleButtonPress); function handleButtonPress() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleResponse; // onreadystatechange有5种状态
xhr.open("GET", "apples.html"); // 从服务器获取信息
xhr.send(); // 没有向服务器发送信息,所以这里为空
} function handleResponse(e) {
// console.log(e.target);
// console.log("he_" + Math.random());
/*
xhr刚创建的时候,onreadystatechange=1
使用open方法后1,请求结束返回4
这里一共打印4次信息
*/ // if (xhr.readyState == XMLHttpRequest.DONE &&
// xhr.status == 200) {
// document.getElementById("target").innerHTML
// = xhr.responseText;
// } if (e.target.readyState == XMLHttpRequest.DONE &&
e.target.status == 200) {
document.getElementById("target").innerHTML
= e.target.responseText;
}
/*
XMLHttpRequest.DONE 相当于 xhr.readyState == 4
由于xhr变量是一个局部变量,所以只能使用e.target才能访问到xhr对象。
若果直接使用xht对象,就会出现未找到xhr对象的错误。
如果不想这么麻烦,直接把xhr对象定义到函数外边也是可以的。
*/
}
})() </script>
</body>
</html>

效果

实例2 从服务器获取PHP文件的数据

使用Ajax技术获取PHP文件的数据,与获取HTML等纯文本格式的文件不同。

服务器上PHP格式的文件不能当成纯文本文件来获取,当我们使用

open(method, php_filename)时,服务器会先执行这个PHP文件,只有echo

出来的数据,才能被JavaScirpt获取到,并返回给xhr.responseText

实例2 ajax+php 获取服务器时间小程序,需要两个文件k1.phptell_time.php

需要在配置好的PHP环境下运行。代码如下:

<!-- filename: k1.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ajax Demonstration</title>
<style>
body {
background-color:#ccc;
text-align:center;
}
.displaybox {
width:150px;
height: 40px;
margin: 0 auto;
margin-top: 20px;
background-color:#ffffff;
border:2px solid #000000;
padding:10px;
font-size: 24px;
font-family: "微软雅黑";
}
</style>
</head>
<body> <h1>Ajax Demonstration</h1>
<h2>无刷新获取服务器时间</h2>
<form>
<input type="button" value="Get Server Time" id="btn">
</form>
<div id="showtime" class="displaybox"></div> <script>
(function(){ var btn = document.getElementById('btn');
btn.addEventListener('click', getServerTime);
var xhr = new XMLHttpRequest(); function getServerTime() {
var myurl = 'tell_time.php';
myRand = parseInt(Math.random() * 99999999);
// 构造随机数,防止缓存问题 var modurl = myurl + "?rand=" + myRand;
xhr.open("GET", myurl);
xhr.onreadystatechange = xhrResponse;
xhr.send();
} function xhrResponse() {
if (xhr.readyState == 4 && xhr.status == 200) {
var timeValue = xhr.responseText; document.getElementById('showtime').innerHTML = timeValue;;
}
} })()
</script> </body>
</html>
<?php
// filename: tell_time.php
date_default_timezone_set('Asia/shanghai');
// 把默认时区设置成中国/上海,也就是设置成北京时间。 echo date('H:i:s');
// 直接打印当前时间。
?>

效果

AJAX基础_AJAX获取PHP数据的更多相关文章

  1. 使用JSONP,jQuery的ajax跨域获取json数据

    网上找了很多资料,写的不错,推荐下: 1.深入浅出JSONP--解决ajax跨域问题 (http://www.cnblogs.com/chopper/archive/2012/03/24/240394 ...

  2. Ajax从服务器端获取数据

    写在前面的话 Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或JSON来进行应用. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用 ...

  3. Ajax从服务器端获取数据---原生态Ajax

    写在前面的话 Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或JSON来进行应用. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用 ...

  4. Struts1.x下使用jquery的Ajax获取后台数据

        jquery中有多种Ajax方法来获取后台数据,我使用的是$.get()方法,具体的理论我不解释太多,要解释也是从别的地方copy过来的.下面就介绍我的项目中的实现方法.     前台页面: ...

  5. ajax获取json数据及实现跨域请求

    最近想练习一下ajax获取json数据 , 首先上网找一些在线的可用来测试的接口. -----------------------------------------------------这里是接口 ...

  6. Ajax读取XML和JSON数据

    Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或者JSON. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用JSON语句话,服务端 ...

  7. 使用Typescript重构axios(六)——实现基础功能:获取响应数据

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  8. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...

  9. 用ajax获取后台数据,返回json数据,怎么在前台使用?

    用ajax获取后台数据,返回json数据,怎么在前台使用呢?后台 C# code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if (dataType == &qu ...

随机推荐

  1. [0] 领域模型 VS 贫血模型

    贫血→结构体领域→封装方法的类 1.领域模型 也要能够 到达解耦,最好不要出现billdao.InsertBill(obj)这种2.领域方法 最好是自身的方法,如改变一个属性值,添加一个子集,而不是一 ...

  2. python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

    首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...

  3. js 动态 key value

    问题描述: 如果var mykey = 'a'; 我们试图 a = {mykey: 'b'} 来达到 a = { 'a': 'b'}的效果,但是mykey直接被作为键值,无法达到要求 解决办法: a ...

  4. CSS active选择器与CSS hover选择器

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  5. 【LeetCode】205. Isomorphic Strings

    题目: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the c ...

  6. SharePoint 2016 修改左上角连接

    SharePoint 2016默认会有左上角这样的一个功能.  估计都想把它改掉. 方法1: 打开,输入下面的命令,可将图中的sharepoint修改为想要的文字 $webapp = Get-SPWe ...

  7. Maven pom.xml配置详解

    POM的全称是“ProjectObjectModel(项目对象模型)”. 声明规范 <projectxmlns="http://maven.apache.org/POM/4.0.0&q ...

  8. vue2.0引入腾讯地图

    百度很多东西,然后我没找到腾讯地图在VUE2.0里面的引用.于是根据找的其他地图引用资料进行尝试.步骤如下. 首先在src里面建立了TMap.js的文件,内容如下: export function T ...

  9. 简单的使用Seajs

    什么是Seajs Seajs是一个加载器 http://yslove.net/seajs/ 遵循 CMD 规范模块化开发,依赖的自动加载.配置的简洁清晰. 兼容性 Chrome 3+ Firefox ...

  10. 构建混合应用方式之 - Azure混合连接

    前面介绍了通过WCF中继构建混合应用的方式,由于对WCF的依赖,使得其使用有一定的局限性,基本上只适用于本地服务是WCF的.NET应用.而混合连接则弥补了这一块的缺陷,除了支持原有WCF中继的功能之外 ...