一、Ajax概要
    Ajax 即“Asynchronous Javascript And XML“(触发器的 JavaScript 和 XML),是指一类建立互动式网页应用领域的网页合作开发设计。Ajax 是一类用于建立加速静态网页的控制技术,透过在前台与伺服器展开小量统计数据传输,Ajax 能使网页同时实现触发器预览。这意味著能在不再次读取整座网页的情形下,对网页的某部份展开预览。——ajax(Ajax 合作开发)_腾讯百科
    二、XMLHttpRequest(XHR):
    在JavaScript中,同时实现Ajax的触发器预览的核心理念是XMLHttpRequest第一类。透过那个第一类,JavaScript 可在不空载网页的情形与 Web 伺服器互换统计数据,即在不须要创下网页的情形下,就能造成局部性创下的效用。上面概要如是说那个第一类的采用方式:
    1. 推送允诺
open(method,url,async); 第二个模块时方式,即get或post,url时推送允诺的门牌号,async则是选定了与否采用触发器允诺(true或false)send(string); 通常用get方式时string为空,用post方式而则核对要推送的统计数据
    2. 赢得响应
    赢得积极响应的两个方式(赢得哪种类别的积极响应值)
    
    窃听伺服器对允诺的积极响应:readyState特性
    
    两个单纯的实例:
    var request = new XMLHttpRequest();
        // get方式允诺
        request.open(“GET”,“get.php”,true);
        request.send();
        // 窃听伺服器积极响应
        if(request.readyState === 4 & request.status === 200){ // 判断积极响应与否完成且与否允诺成功
         //利用responseText等方式得到积极响应的内容并做进一步处理
        }
    
    jQuery采用Ajax:
    jQuery.ajax([setting]): setting的两个选项如下
    
    $.ajax({
        type: “GET”,
        url: “http://127.0.0.1:8080/ajaxdemo/serverjson2.php?number=” + $(“#keyword”).val(),
        dataType: “json”,
        success: function(data) { // 返回成功之后
         if (data.success) {
        $(“#searchResult”).html(data.msg);
        } else {
        $(“#searchResult”).html(“出现错误:” + data.msg);
        }
        },
        error: function(jqXHR){
        alert(“发生错误:” + jqXHR.status);
        },
        });
        $.ajax({
        type: “POST”,
        url: “serverjson.php”,
        data: { // 要推送的统计数据
         name: $(“#staffName”).val(),
        number: $(“#staffNumber”).val(),
        sex: $(“#staffSex”).val(),
        job: $(“#staffJob”).val()
        },
        dataType: “json”,
        success: function(data){
        if (data.success) {
        $(“#createResult”).html(data.msg); // 注意这里是因为我们知道返回的json第一类中有msg那个特性
         } else {
        $(“#createResult”).html(“出现错误:” + data.msg);
        }
        },
        error: function(jqXHR){
        alert(“发生错误:” + jqXHR.status);
        },
        });
    
    上面的例子定义了dataType为json,则返回的统计数据会自动转换为json第一类,可直接按照json第一类展开方式调用等操作。
    三、PHP处理Ajax允诺
    //设置网页内容是html编码格式是utf-8header(“Content-Type: text/plain;charset=utf-8”); // 表示返回的是纯文本格式
        header(“Content-Type: application/json;charset=utf-8”); // 表示返回的是json格式的统计数据
        header(“Content-Type: text/xml;charset=utf-8”); // 表示返回的是xml格式的统计数据header(“Content-Type: text/html;charset=utf-8”); // 表示返回的是html格式的统计数据
        header(“Content-Type: application/javascript;charset=utf-8”); // 表示返回的是JavaScript格式的统计数据
        
    PHP编写的前台程序能用 $_SERVER[“REQUEST_METHOD”] 那个超全局变量来判定允诺是GET允诺还是POST允诺,进而展开一些操作:
    if ($_SERVER[“REQUEST_METHOD”] == “GET”) {
        可透过
        } elseif ($_SERVER[“REQUEST_METHOD”] == “POST”){
        可透过
        }
    
    四、JSON(JavaScript object Notation)
    1、键值对的形式组织统计数据
键值对组合,键写在前面(放在双引号中),值写在后面,键和值用冒号分隔,例如:”name”:”yao”;json的值支持 数字(整型、浮点型),字符串,逻辑值(true/false),数组(在方括号[]中),第一类(在花括号{}中),null举例:键值staff,其值为数组,而数组中包含3个第一类,如下。
    {
        “staff”:[
        {“name”:“tom”,“age”:28},
        {“name”:“jack”,“age”:27},
        {“name”:“jane”,“age”:24}
        ]
        }
    
    2、JavaScript解析JSON
eval方式var jsondata = {
         “staff”:[
        {“name”:”tom”,”age”:28}, {“name”:”jack”,”age”:27},
         {“name”:”jane”,”age”:24}
         ]
        };
        var jsonobj = eval(( + jsondata + ));
        alert(jsonobj.staff[0].name); // 输出tom
        
    
JSON.parse()var jsondata = {
         “staff”:[
        {“name”:”tom”,”age”:28}, {“name”:”jack”,”age”:27},
         {“name”:”jane”,”age”:24}
         ]
        };
        var jsonobj = JSON.parse(jsondata ) ;
        alert(jsonobj.staff[0].name); // 输出tom
        
    
    推荐JSON.parse()解析json统计数据,因为eval存在安全问题,eval方式会执行json中存在的方式,此时如果插入恶意代码,则用eval解析时可能会执行这段json代码, 而JSON.parse()不允许json统计数据中带有方式,因此具有一定的安全性。
    例如
    var jsondata = {
         “staff”:[
        {“name”:”tom”,”age”:alert(123)},
         {“name”:”jack”,”age”:27},
         {“name”:”jane”,”age”:24}
         ]
        };
        var jsonobj = eval(( + jsondata + ));
        alert(jsonobj.staff[0].name); // 此时会先弹出123的弹窗,再输出tom,而如果这里采用JSON.parse()方式会报错
        
    
    json解析、格式化和校验工具,Ajax全接触教程-慕课网 
    json校验工具(判断json统计数据的书写格式与否正确)——The JSON Validator
    五、处理跨域问题
    
    不同域的例子:
    
    JavaScript遵循同源策略,因此不支持直接跨域访问资源,因此须要利用其它的方式来实现资源的跨域访问。
    1、jsonp
    jquery采用jsonp
    $.ajax({
        type: “GET”,
        url: “http://127.0.0.1:8000/ajaxdemo/serverjsonp.php?number=” + $(“#keyword”).val(),
        dataType: “jsonp”, // 将统计数据格式改为jsonp
         jsonp: “callback”, // 定义两个值为callback的jsonp特性 success: function(data) {
        if (data.success) {
        $(“#searchResult”).html(data.msg);
        } else {
        $(“#searchResult”).html(“出现错误:” + data.msg);
        }
        },
        error: function(jqXHR){
        alert(“发生错误:” + jqXHR.status);
        },
        });
    
    允诺应写为
    $jsonp = $_GET[callback]; // 对应上面的jsonp特性
        // 返回值
        $result = $jsonp.({用花括号括起要返回的统计数据,同时这里的小括号是必须的})
    
    2、HTML5新特性 XHR2
    须要再服务端展开修改,此时添加
    header(Access-Control-Allow-Origin:*); // 表示接受的域,* 表示任意域
        header(Access-Control-Allow-Methods:POST,GET); // 接受的允诺方式
        
    然后前台服务代码能不做改动,就能同时实现跨域访问了
    参考教程