首页 > 代码库 > 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学习笔记