首页 > 代码库 > Ajax学习笔记

Ajax学习笔记

Ajax

什么是ajax

AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。
以前,几乎所有的网站都由HTML页面实现,服务器处理每一个用户请求都需要重新加载网页。这样的处理方式效率不高。用户的体验是所有页面都会消失,再重新载入,即使只是一部分页面元素改变也要重新载入整个页面,不仅要刷新改变的部分,连没有变化的部分也要刷新。这会加重服务器的负担。
这可以用异步加载来解决。ajax实现了局部刷新页面。

在了解ajax怎么使用之前,应该先了解XMLHttpRequest对象。

XMLHttpRequest对象

声明一个XMLHttpRequest对象:

var request =new XMLHttpRequest();(IE5和IE6不支持这种声明)
兼容IE5和IE6的声明:
var request;
if(window.XMLHttpRequest){
Request=new XMLHttpRequest();//IE7+,和chrome,Firefox等浏览器;}
else{
request=new ActiveXObject(“Microsoft.XMLHTTP”);//IE5,IE6
}

Http

◎Http:

◆一套计算机通过网络进行通信的规则;
◆一种无状态协议(无状态协议:不保留持久的连接);
◆使客户(浏览器)能够向web服务器请求信息和服务。

◎HTTP请求:

●步骤:1.建立TCP连接;
2.Web浏览器向Web服务器发送请求命令;
3.Web浏览器发送请求头信息;
4.Web服务器应答;
5.Web服务器发送应答头信息;
6.Web服务器向浏览器发送数据;
7.Web服务器关闭TCP连接。
●HTTP请求一般由四部分组成:
1.HTTP请求的方法或动作,比如是get还是post请求;
2.正在请求的URL(请求的地址);
3.请求头,包含一些客户端环境信息、身份验证信息等;
4.请求体(请求正文),可以包含客户提交的查询字符串信息、表单信息等。

●GET:一般用于信息获取(常用于查询);使用URL传递参数(变量显示在URL中,所有人可见);对所发送信息的数量有限制(一般在2000个字符)。
POST:一般用于修改服务器上的资源;对所发送的信息数量无限制。(不在URL中显示,对其他人不可见,信息在请求体中)(常用于发送表单数据,新建、修改等)。

◎HTTP响应:

一般由三部分组成:
1.一个数字和文字组成的状态码,用来显示请求是成功还是失败;
2.响应头,响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等;
3.响应体(响应正文)。

XMLHttpRequest发送请求

open(method,url,asyn) //(请求方法GET/POST,请求地址,同步(false)/异步(true,默认为true,可不写));
send(string) //(将请求发送到服务器,GET请求参数在URL中,所以参数string可写none,也可不写;POST时参数string要写)

XMLHTTPRequest取得响应:
responseText:获得字符串形式的响应数据;
responseXML:获得XML形式的响应数据;
status和statusTest:以数字和文本的形式返回HTTP状态码;
getAllResponseHeader():获取所有的响应报头;
getResponseHeader():查询响应中的某个字段的值;
readyState属性:这个属性的变化代表了服务器的响应的变化。
0:请求未初始化,open还没有调用;
1:服务器连接已建立,open已经调用;
2:请求已接受,也就是接收到头信息了;
3:请求处理中,也就是接收到响应主体了;
4: 请求已完成,且响应已就绪,也就是响应完成了。
eg:var request=new XMLHttpRequest();
request.open(“GET”,“get.php”,true);
request.send();
request.onreadystatechange=function(){
if(request.readyState===4&&request.status===200){
//做一些事情 request.responseText
}
}

php

◎php:是一种创建动态交互性站点的服务器端脚本语言;
(服务器端脚本语言?HTML和js是客户端语言,用于实现页面呈现、特效;服务器端脚本语言:用于从服务器端的存取)
◎PHP:(兼容几乎所有web服务器,支持几乎所有数据库)
◆能够生成动态页面内容;
◆能够创建、打开、读取、写入、删除以及关闭服务器上的文件;
◆能够接收表单数据;
◆能够发送并取回cookies;
◆能够添加、删除、修改数据库中的数据;
◆能够限制用户访问网站中的某些页面等。

PHP测试页面

● Php脚本以<?Php开头,以?>结尾
● Php文件的默认文件扩展名是.php
● Php语句以分号结尾(;)

例子(员工查询和添加):



文/恰皮(简书作者)
原文链接:http://www.jianshu.com/p/a5898dae1f1b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>//查询表单<h1>员工查询</h1><label>请输入员工编号:</label><input type="text" id="keyword"/><button id="search">查询</button><p id="searchResult"></p>//添加员工的表单<h1>员工添加</h1><label>请输入员工编号:</label><input type="text" id="staffnumber"/><label>请输入员工姓名:</label><input type="text" id="staffname" /><label>请选择员工性别:</label><select id="staffsex">    <option></option>    <option></option></select><label>请输入员工职位:</label><input type="text" id="staffjob" /><button id="save">保存</button><p id="createResult"></p><script type="text/javascript">//为“查询”按钮添加点击事件:点击时查询相关员工:    document.getElementById("search").onclick=function(){        var request=new XMLHttpRequest();//生成XHR对象;        request.open("GET","server.php?number="+document.getElementById("keyword").value);//XHR对象的open方法:请求方法:get;请求地址:server.php,参数为输入的编号;        request.send();//发送请求//监听request的状态的改变:readyState的改变:        request.onreadystatechange=function () {            if(request.readyState==4){//如果readyState为4即服务器响应已完成;                if(request.status===200){                //如果request的状态码为200;document.getElementById("searchResult").innerHTML=request.responseText;//将查询结果显示;                }                else{                    alert("发生错误"+request.status);                }            }        }    }//为“保存”按钮添加点击事件:点击时添加相关员工:document.getElementById("save").onclick=function(){    var add_staff=new XMLHttpRequest();//生成XHR对象;        add_staff.open("POST","server.php");//XHR对象的open方法:请求方法:post;请求地址:server.php;        var data="number="+document.getElementById("staffnumber").value+"&name="+document.getElementById("staffname").value+"&sex="+document.getElementById("staffsex").value+"&job="+document.getElementById("staffjob").value;//将填写的数据保存到data;     add_staff.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//设置请求头的content-type为获取表单信息;        add_staff.send(data);//发送请求,post的参数为data;//监听add_staff的状态的改变:readyState的改变:        add_staff.onreadystatechange=function () {            if(add_staff.readyState==4){/如果readyState为4即服务器响应已完成; if(add_staff.status===200){如果request的状态码为200;//将响应内容显示出来:  document.getElementById("createResult").innerHTML=add_staff.responseText;                }                else{                    alert("发生错误"+add_staff.status);                }            }        }    }</script></body></html>

Server.php文件:

<?php//设置页面内容是html编码格式是utf-8header("Content-Type: text/plain;charset=utf-8"); //header("Content-Type: application/json;charset=utf-8"); //header("Content-Type: text/xml;charset=utf-8"); //header("Content-Type: text/html;charset=utf-8"); //header("Content-Type: application/javascript;charset=utf-8"); //定义一个多维数组,包含员工的信息,每条员工信息为一个数组$staff = array    (        array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),        array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),        array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理")    );//判断如果是get请求,则进行搜索;如果是POST请求,则进行新建//$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字//$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法if ($_SERVER["REQUEST_METHOD"] == "GET") {    search();} elseif ($_SERVER["REQUEST_METHOD"] == "POST"){    create();}//通过员工编号搜索员工function search(){    //检查是否有员工编号的参数    //isset检测变量是否设置;empty判断值为否为空    //超全局变量 $_GET 和 $_POST 用于收集表单数据    if (!isset($_GET["number"]) || empty($_GET["number"])) {        echo "参数错误";        return;    }    //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。    //global 关键词用于访问函数内的全局变量    global $staff;    //获取number参数    $number = $_GET["number"];    $result = "没有找到员工。";    //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果    foreach ($staff as $value) {        if ($value["number"] == $number) {            $result = "找到员工:员工编号:" . $value["number"] . ",员工姓名:" . $value["name"] .                               ",员工性别:" . $value["sex"] . ",员工职位:" . $value["job"];            break;        }    }    echo $result;}//创建员工function create(){    parse_str(file_get_contents(‘php://input‘), $_POST);//解决post拿不到内容;    //判断信息是否填写完全    if (!isset($_POST["name"]) || empty($_POST["name"])        || !isset($_POST["number"]) || empty($_POST["number"])        || !isset($_POST["sex"]) || empty($_POST["sex"])        || !isset($_POST["job"]) || empty($_POST["job"])) {        echo "参数错误,员工信息填写不全";        return;    }    //TODO: 获取POST表单数据并保存到数据库    //提示保存成功    echo "员工:" . $_POST["name"] . " 信息保存成功!";}文/恰皮(简书作者)原文链接:http://www.jianshu.com/p/a5898dae1f1b著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

json

◎JSON:javascript对象表示法;
◎JSON是存储和交换文本信息的语法,类似XML。它采用键值对的方式来组织,易于人们阅读和编写,同时也易于机器解析和生成。
◎JSON是独立于语言的,也就是说不管什么语言,都可以解析JSON,只需要按照JSON的规则来就行。

●JSON的长度和xml格式比起来很短小;
●JSON的读写速度更快;
●JSON可以使用javascript内建的方法直接进行解析,转换成javascript对象,非常方便。

Json语法规则

Json数据的书写格式是:名称/值对,eg:“name”:“大猪”。
●Json的值可以是下面这些类型:
◆数字(整数或浮点数),eg:123,1.23;
◆字符串(在双引号中);
◆逻辑值(true或false);
◆数组(在方括号中);
◆对象(在花括号中);
◆Null;

Eg:
{//大括号括起来表示一个json对象;
“staff”:[
{“name”: “洪七”, “age”:70},
{“name”: “郭靖”, “age”:35},
{“name”: “黄蓉”, “age”:30}
]
}

Json解析

◎Eval和JSON.parse:

Tip:在代码中使用eval是很危险的!特别是用它执行第三方的json数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身方法还可以捕捉json中的语法错误.
Eg:
●使用eval:
var jsondata=http://www.mamicode.com/‘{"staff":[{"name":"洪七","age":70},{"name":"郭靖","age":35},{"name":"黄蓉","age":30}]}‘;
var jsonobj=eval(‘(‘+jsondata+‘)‘);
alert(jsonobj.staff[0].name);
结果:弹出 “洪七”;
●使用JSON.parse():
var jsondata=http://www.mamicode.com/‘{"staff":[{"name":"洪七","age":70},{"name":"郭靖","age":35},{"name":"黄蓉","age":30}]}‘;
var jsonobj=JSON.parse(jsondata);
alert(jsonobj.staff[0].name);
结果:弹出 “洪七”;
■如果代码中出现错误:
●使用eval时,无法检验代码中的错误,例如例子中的alert,eval方法不会检查出这个错误,于是弹出 “123”,再弹出 “洪七”.
var jsondata=http://www.mamicode.com/‘{"staff":[{"name":"洪七","age":alert(123)},{"name":"郭靖","age":35},{"name":"黄蓉","age":30}]}‘;
var jsonobj=eval(‘(‘+jsondata+‘)‘);
alert(jsonobj.staff[0].name);
●使用JSON.parse()方法时会检查出alert这个错误,出现VM530:1 Uncaught SyntaxError: Unexpected token a in JSON at position 29(…),不会弹出任何信息.
Var jsondata=http://www.mamicode.com/‘{"staff":[{"name":"洪七","age":alert(2)},{"name":"郭靖","age":35},{"name":"黄蓉","age":30}]}‘;
var jsonobj=JSON.parse(jsondata);
alert(jsonobj.staff[0].name);

tip:☆Json格式化和校验:
在线校验工具:jsonlint.com

对上面的例子 “员工查询和添加”用json改写:
首先约定:
{
“success”:true;//表示请求是否成功;
“msg”: “xxx”;//表示请求的返回信息;
}

例子代码修改:

客户端代码:



文/恰皮(简书作者)
原文链接:http://www.jianshu.com/p/a5898dae1f1b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>员工查询</h1><label>请输入员工编号:</label><input type="text" id="keyword"/><button id="search">查询</button><p id="searchResult"></p><h1>员工添加</h1><label>请输入员工编号:</label><input type="text" id="staffnumber"/><label>请输入员工姓名:</label><input type="text" id="staffname" /><label>请选择员工性别:</label><select id="staffsex">    <option></option>    <option></option></select><label>请输入员工职位:</label><input type="text" id="staffjob" /><button id="save">保存</button><p id="createResult"></p><script type="text/javascript">    document.getElementById("search").onclick=function(){        var request=new XMLHttpRequest();        request.open("GET","server.php?number="+document.getElementById("keyword").value);        request.send();        request.onreadystatechange=function () {            if(request.readyState==4){                if(request.status===200){                    var data=JSON.parse(request.responseText);//解析服务器返回的信息;                    if(data.success){                        document.getElementById("searchResult").innerHTML=data.msg;                    }                    else {                        document.getElementById("searchResult").innerHTML="出现错误:"+data.msg;                    }                }                else{                    alert("发生错误"+request.status);                }            }        }    }    document.getElementById("save").onclick=function(){        console.log(haha);        var add_staff=new XMLHttpRequest();        add_staff.open("POST","server.php");        var data="number="+document.getElementById("staffnumber").value+"&name="+document.getElementById("staffname").value+"&sex="+document.getElementById("staffsex").value+"&job="+document.getElementById("staffjob").value;add_staff.setRequestHeader("Content-Type","application/x-www-form-urlencoded");        add_staff.send(data);        add_staff.onreadystatechange=function () {            if(add_staff.readyState==4){                if(add_staff.status===200){                    var data=JSON.parse(add_staff.responseText);                    if(data.success){                        document.getElementById("createResult").innerHTML=data.msg;                    }                    else {      document.getElementById("createResult").innerHTML = "出现错误" + data.msg;                    }                }                else{                    alert("发生错误"+add_staff.status);                }            }        }    }</script></body></html>

服务器端server.php修改:

<?php//设置页面内容是html编码格式是utf-8//header("Content-Type: text/plain;charset=utf-8");header("Content-Type: application/json;charset=utf-8");//header("Content-Type: text/xml;charset=utf-8"); //header("Content-Type: text/html;charset=utf-8"); //header("Content-Type: application/javascript;charset=utf-8"); //定义一个多维数组,包含员工的信息,每条员工信息为一个数组$staff = array    (        array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),        array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),        array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理")    );//判断如果是get请求,则进行搜索;如果是POST请求,则进行新建//$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字//$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法if ($_SERVER["REQUEST_METHOD"] == "GET") {    search();} elseif ($_SERVER["REQUEST_METHOD"] == "POST"){    create();}//通过员工编号搜索员工function search(){    //检查是否有员工编号的参数    //isset检测变量是否设置;empty判断值为否为空    //超全局变量 $_GET 和 $_POST 用于收集表单数据    if (!isset($_GET["number"]) || empty($_GET["number"])) {        echo ‘{"success":false,"msg":"参数错误"}‘;        return;    }    //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。    //global 关键词用于访问函数内的全局变量    global $staff;    //获取number参数    $number = $_GET["number"];    $result = ‘{"success":false,"msg":"没有找到员工。"}‘;    //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果    foreach ($staff as $value) {        if ($value["number"] == $number) {            $result = ‘{"success":true,"msg":"找到员工:员工编号:‘ . $value["number"] . ‘,员工姓名:‘ . $value["name"] .‘,员工性别:‘ . $value["sex"] . ‘,员工职位:‘ . $value["job"].‘"}‘;            break;        }    }    echo $result;}//创建员工function create(){    parse_str(file_get_contents(‘php://input‘), $_POST);    //判断信息是否填写完全    if (!isset($_POST["name"]) || empty($_POST["name"])        || !isset($_POST["number"]) || empty($_POST["number"])        || !isset($_POST["sex"]) || empty($_POST["sex"])        || !isset($_POST["job"]) || empty($_POST["job"])) {        echo ‘{"success":false,"msg":"参数错误,员工信息填写不全"}‘;        return;    }    //TODO: 获取POST表单数据并保存到数据库    //提示保存成功    echo ‘{"success":true,"msg":"员工:‘ . $_POST["name"] . ‘ 信息保存成功!"}‘;}文/恰皮(简书作者)原文链接:http://www.jianshu.com/p/a5898dae1f1b著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

用jquery实现ajax

Jquery.ajax([settings])
●Type:类型, “POST”或者 “GET”,默认为 “GET”
●Url:发送请求地址;
●Data:是一个对象,连同请求发送到服务器的数据;
●dataType:预期服务器返回的数据类型.如果不指定,jquery将自动根据HTTP包MIME信息来智能判断,一般我们采用json格式,可以设置为 “json”.
●Success:是一个方法,请求成功后的回调函数.传入返回后的数据,以及包含成功代码的字符串.
●Error:是一个方法,请求失败时调用此函数,传入XMLHttpResult对象.
用jquery实现ajax改写例子:



文/恰皮(简书作者)
原文链接:http://www.jianshu.com/p/a5898dae1f1b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>员工查询</h1><label>请输入员工编号:</label><input type="text" id="keyword"/><button id="search">查询</button><p id="searchResult"></p><h1>员工添加</h1><label>请输入员工编号:</label><input type="text" id="staffnumber"/><label>请输入员工姓名:</label><input type="text" id="staffname" /><label>请选择员工性别:</label><select id="staffsex">    <option></option>    <option></option></select><label>请输入员工职位:</label><input type="text" id="staffjob" /><button id="save">保存</button><p id="createResult"></p><script src="jquery-3.1.0.min.js"></script><script>    $(document).ready(function () {        $("#search").click(function () {            $.ajax({                type:"GET",                url:"server.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);                }            });        });        $("#save").click(function () {            $.ajax({                type:"POST",                url:"server.php",                dataType:"json",                data:{                    name:$("#staffname").val(),                    number:$("#staffnumber").val(),                    sex:$("#staffsex").val(),                    job:$("#staffjob").val()                },                success:function (data) {                    if(data.success){                        $("#createResult").html(data.msg);                    }                    else {                        $("#createResult").html("出现错误:"+data.msg);                    }                },                error:function (jqXHR) {                    alert("发生错误"+jqXHR.status);                }            });        });    });    /*document.getElementById("search").onclick=function(){        var request=new XMLHttpRequest();        request.open("GET","server.php?number="+document.getElementById("keyword").value);        request.send();        request.onreadystatechange=function () {            if(request.readyState==4){                if(request.status===200){                    var data=http://www.mamicode.com/JSON.parse(request.responseText);"searchResult").innerHTML=data.msg;                    }                    else {                        document.getElementById("searchResult").innerHTML="出现错误:"+data.msg;                    }                }                else{                    alert("发生错误"+request.status);                }            }        }    }    document.getElementById("save").onclick=function(){        console.log(‘haha‘);        var add_staff=new XMLHttpRequest();        add_staff.open("POST","server.php");        var data="http://www.mamicode.com/number="+document.getElementById("staffnumber").value+"&name="+document.getElementById("staffname").value+"&sex="+document.getElementById("staffsex").value+"&job="+document.getElementById("staffjob").value;        add_staff.setRequestHeader("Content-Type","application/x-www-form-urlencoded");        add_staff.send(data);        add_staff.onreadystatechange=function () {            if(add_staff.readyState==4){                if(add_staff.status===200){                    var data=http://www.mamicode.com/JSON.parse(add_staff.responseText);"createResult").innerHTML=data.msg;                    }                    else {                        document.getElementById("createResult").innerHTML = "出现错误" + data.msg;                    }                }                else{                    alert("发生错误"+add_staff.status);                }            }        }    }*/</script></body></html>

跨域

◎一个域名地址的组成:

当协议、子域名、主域名、端口号中的任意一个不相同时,都算作不同域。
◎不同域之间相互请求资源,就算做跨域,比如:http://www.abc.com/index/html请求http://www.efg.com/service.php
◎Javascript出于安全方面的考虑,不允许跨域调用其他页面的对象。
◎跨域就是因为javascript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象。
◎Javascript出于安全方面的考虑,不允许跨域调用其他页面的对象。
●www.abc.com/index.html调用www.abc.com/service.php(没有写协议默认是http,所以协议、主域名、子域名和端口号都相同,非跨域)
●www.abc.com/index.html调用www.efg.com/service.php(子域名不同,跨域)
●www.abc.com/index.html调用bbs.abc.com/service.php(子域名不同,跨域)
●www.abc.com/index.html调用https://www.abc.com/service.php(协议不同,一个是http,一个是https,跨域)
●www.abc.com/index/html调用www.abc.com:81/service.php(端口号不同,跨域)

处理跨域的方法:

用jsonp处理跨域:

jsonp可用于解决主流浏览器的跨域数据访问的问题(即可以处理get不可以处理post)

修改例子:



文/恰皮(简书作者)
原文链接:http://www.jianshu.com/p/a5898dae1f1b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>员工查询</h1><label>请输入员工编号:</label><input type="text" id="keyword"/><button id="search">查询</button><p id="searchResult"></p><h1>员工添加</h1><label>请输入员工编号:</label><input type="text" id="staffnumber"/><label>请输入员工姓名:</label><input type="text" id="staffname" /><label>请选择员工性别:</label><select id="staffsex">    <option></option>    <option></option></select><label>请输入员工职位:</label><input type="text" id="staffjob" /><button id="save">保存</button><p id="createResult"></p><script src="jquery-3.1.0.min.js"></script><script>    $(document).ready(function () {        $("#search").click(function () {            $.ajax({                type:"GET",                url:"http://localhost:8080/try2/server.php?number="+$("#keyword").val(),//客户端请求的url地址属于跨域,端口号不同.                dataType:"jsonp",//修改dataType为jsonp;                jsonp:"callback",//添加jsonp属性为自定义的callback;                success:function (data) {                    if(data.success){                        $("#searchResult").html(data.msg);                    }                    else {                        $("#searchResult").html("出现错误:"+data.msg);                    }                },                error:function (jqXHR) {                    alert("发生错误"+jqXHR.status);                }            });        });        $("#save").click(function () {            $.ajax({                type:"POST",                url:"server.php",                dataType:"json",                data:{                    name:$("#staffname").val(),                    number:$("#staffnumber").val(),                    sex:$("#staffsex").val(),                    job:$("#staffjob").val()                },                success:function (data) {                    if(data.success){                        $("#createResult").html(data.msg);                    }                    else {                        $("#createResult").html("出现错误:"+data.msg);                    }                },                error:function (jqXHR) {                    alert("发生错误"+jqXHR.status);                }            });        });    });</script></body></html>

服务器端代码server.php:

<?php//设置页面内容是html编码格式是utf-8//header("Content-Type: text/plain;charset=utf-8");header("Content-Type: application/json;charset=utf-8");//header("Content-Type: text/xml;charset=utf-8");//header("Content-Type: text/html;charset=utf-8");//header("Content-Type: application/javascript;charset=utf-8");//定义一个多维数组,包含员工的信息,每条员工信息为一个数组$staff = array(    array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),    array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),    array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理"));//判断如果是get请求,则进行搜索;如果是POST请求,则进行新建//$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字//$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法if ($_SERVER["REQUEST_METHOD"] == "GET") {    search();} elseif ($_SERVER["REQUEST_METHOD"] == "POST"){    create();}//通过员工编号搜索员工function search(){    $jsonp=$_GET["callback"];    //检查是否有员工编号的参数    //isset检测变量是否设置;empty判断值为否为空    //超全局变量 $_GET 和 $_POST 用于收集表单数据    if (!isset($_GET["number"]) || empty($_GET["number"])) {        echo ‘{"success":false,"msg":"参数错误"}‘;        return;    }    //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。    //global 关键词用于访问函数内的全局变量    global $staff;    //获取number参数    $number = $_GET["number"];    $result = $jsonp.‘({"success":false,"msg":"没有找到员工。"})‘;    //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果    foreach ($staff as $value) {        if ($value["number"] == $number) {            $result = $jsonp.‘({"success":true,"msg":"找到员工:员工编号:‘ . $value["number"] . ‘,员工姓名:‘ . $value["name"] .‘,员工性别:‘ . $value["sex"] . ‘,员工职位:‘ . $value["job"].‘"})‘;            break;        }    }    echo $result;}//创建员工function create(){    parse_str(file_get_contents(‘php://input‘), $_POST);    //判断信息是否填写完全    if (!isset($_POST["name"]) || empty($_POST["name"])        || !isset($_POST["number"]) || empty($_POST["number"])        || !isset($_POST["sex"]) || empty($_POST["sex"])        || !isset($_POST["job"]) || empty($_POST["job"])) {        echo ‘{"success":false,"msg":"参数错误,员工信息填写不全"}‘;        return;    }    //TODO: 获取POST表单数据并保存到数据库    //提示保存成功    echo ‘{"success":true,"msg":"员工:‘ . $_POST["name"] . ‘ 信息保存成功!"}‘;}文/恰皮(简书作者)原文链接:http://www.jianshu.com/p/a5898dae1f1b著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

用XHR2处理跨域:

Html5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能.
IE10以下的版本都不支持.
在服务器端做一些小的修改即可:
Header(‘Access-Control-Allow-Origin:’);
Header(‘Access-Control-Allow-Methods:POST,GET’);
Eg:
<?php
//设置页面内容是html编码格式是utf-8
//header("Content-Type: text/plain;charset=utf-8");
header("Content-Type: application/json;charset=utf-8");
header("Access-Control-Allow-Origin:
");//*代表所有域都可以访问,也可以设置一个特定的域名;
header("Access-Control-Allow-Methods:POST,GET");

 

Ajax学习笔记