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-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 "参数错误";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='{"staff":[{"name":"洪七","age":70},{"name":"郭靖","age":35},{"name":"黄蓉","age":30}]}';
var jsonobj=eval('('+jsondata+')');
alert(jsonobj.staff[0].name);
结果:弹出 “洪七”;
●使用JSON.parse():
var jsondata='{"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='{"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='{"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").οnclick=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").οnclick=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>

跨域

◎一个域名地址的组成:

当协议、子域名、主域名、端口号中的任意一个不相同时,都算作不同域。
◎不同域之间相互请求资源,就算做跨域,比如: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");

 

转载于:https://www.cnblogs.com/BrokenIce/p/5817429.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团点评DBProxy读写分离使用说明

目的 因为业务架构上需要实现读写分离&#xff0c;刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy&#xff0c;关于其介绍在官方文档已经有很详细的说明了&#xff0c;其特性主要有&#xff1a;读写分离、负载均衡、支持分表、IP过滤、sql语句黑名单、…

apriori算法c++_关联分析——基于Apriori算法实现

电子商务推荐系统主要是通过统计和挖掘技术&#xff0c;根据用户在网站上的行为,主动为用户提供推荐服务&#xff0c;从而提高网站体验。而根据不同的业务场景&#xff0c;推荐系统需要满足不同的推荐粒度&#xff0c;包括搜索推荐,商品类目推荐,商品标签推荐&#xff0c;店铺推…

在Oracle Coherence中分发Spring Bean

本文展示了如何通过使用Oracle Coherence中的EntryProcessor和可移植对象格式&#xff08;POF&#xff09;功能来分发Spring Bean。 Coherence通过EntryProcessor API支持无锁编程模型。 此功能通过减少网络访问并在条目上执行隐式的低级锁定来提高系统性能。 此隐式低级锁定功…

postman测试实例--断言

让我们来看看postman测试的一些例子。 其中大部分是作为内部postman片段。 大多数测试是为单行的JavaScript语句一样简单。 只要你想一个请求&#xff0c;你可以有很多的测试。注意&#xff1a;一个响应已从服务器接收后测试脚本运行。测试实例1.设置环境变量 postman.setEnvir…

python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式&#xff0c;该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中&#xff0c;某个类只能出现一个实例时&#xff0c;单例对象就能派上用场。比如&#xff0c;某个服务器程序的配置信息存放在一…

android-铃声的设置与播放

在android系统中&#xff0c;不同铃声存放的铃声路径&#xff1a;/system/media/audio/ringtones 来电铃声/system/media/audio/notifications 短信通知铃声/system/media/audio/alarms 闹钟铃声铃声的设置&#xff1a;import java.io.File; import andr…

Apache Commons SCXML:有限状态机实现

本文提到有限状态机&#xff08;FSM&#xff09;&#xff0c;SCXML&#xff08;状态图可扩展标记语言&#xff09;和Apache Common的SCXML库。 本文还提供了基本的ATM有限状态机示例代码。 有限状态机&#xff1a; 您可能还记得计算机科学课程中的有限状态机。 FSM用于设计计算…

第二十章、分离应用程序逻辑并处理事件

理解委托 委托是对方法的引用。&#xff08;之所以称为委托&#xff0c;是因为一旦被调用&#xff0c;就将具体的处理“委托”给引用的方法&#xff09; 委托对象引用了方法&#xff0c;和将int赋值给int变量一样&#xff0c;是将方法引用赋给委托对象。 Processor p new Proc…

pymol怎么做底物口袋表面_怎么从文献中发掘一篇新文章?

本文来自微信公众号&#xff1a;X-MOLNews可能你的导师也曾说过这样的话——盯着Nature、Science级别的文章做&#xff0c;可能最终会中十分的文章&#xff1b;如果盯着十分的文章做&#xff0c;可能最终发出来也就五六分&#xff1b;但如果就为了发个文章混毕业&#xff0c;很…

如何分析线程转储– IBM VM

本文是我们的线程转储分析系列的第4部分&#xff0c;它将为您概述什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点。 您将看到和学习​​到&#xff0c;IBM VM Thread Dump格式是不同的&#xff0c;但是提供了更多现成的故障排除数据。 在这一点上&#xff0c;您应该…

VMware vSphere克隆虚拟机

参考资料&#xff1a;http://blog.csdn.net/shen_jz2012/article/details/484167711. 首先将你所要克隆的虚拟机关掉2. 选择你的ESXI服务器选中"配置"&#xff0c;然后选中存储器右键你的存储介质&#xff0c;比如我的是datastore1&#xff0c;选择“浏览数据存储”。…

将本地jar包倒入maven项目类库中

有两种方法&#xff1a;1.本地下载maven并配置环境变量&#xff0c;然后运行cmd控制台输入 mvn install:install-file -Dfile本地jar路径 -DgroupId -DartifactId -Dpackagingjar -Dversion -DgeneratePomtrue. 2.直接在pom.xml中对应的依赖下面添加<scope>system&l…

Spring和JSF集成:分页

处理大型数据集时&#xff0c;通常需要以分页格式显示数据。 分页是一个有趣的问题&#xff0c;因为它倾向于跨越应用程序的所有层&#xff0c;从视图层通过应用程序服务一直到对数据库的原始调用。 在获取分页数据时&#xff0c;有一些非常好的解决方案。 如果您使用的是JPA&a…

三重积分平均值_直角坐标系下的三重积分的几何可视化解释图解高等数学

12.4 直角坐标系下的三重积分三重积分假设 F(x,y,z) 为一个空间有界闭区域 D 上的函数. D 为下面立体椭球所占区域. 将空间区域分割成小长方块. 体积记为 ΔVk, 其长宽高分别为Δxk, Δyk, Δzk , 并有下列的求和式:观察下面动画, 当空间不断分割, 每个小方块的体积 ΔVk 不断变…

最短网络Agri-Net

【例4-11】、最短网络Agri-Net【问题描述】农民约翰被选为他们镇的镇长&#xff01;他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。当然&#xff0c;他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给…

cors-synchronous-requests-not-working-in-firefox

http://stackoverflow.com/questions/16668386/cors-synchronous-requests-not-working-in-firefox转载于:https://www.cnblogs.com/diyunpeng/p/5829594.html

硬盘接口协议

硬盘是电脑主要的存储媒介之一&#xff0c;由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。硬盘有固态硬盘&#xff08;SSD 盘&#xff0c;新式硬盘&#xff09;、机械硬盘&#xff08;HDD 传统硬盘&#xff09;、混合硬盘&#xff08;HHD 一块基于传统机械…

图的表示

Python 数据结构与算法——图&#xff08;Graph&#xff09; 1. 邻接矩阵 vs 邻接表&#xff08;压缩的邻接矩阵&#xff09; 邻接矩阵的缺点是&#xff1a; 空间占用与结点数的平方成正比&#xff0c;可能带来很大的浪费&#xff1b;邻接矩阵不容易增加新的结点&#xff0c;不…

在Java Web应用程序中阻止CSRF

跨站点请求伪造攻击&#xff08;CSRF&#xff09;在Web应用程序中非常常见&#xff0c;如果允许&#xff0c;可能会造成重大危害。 如果您从未听说过CSRF&#xff0c;建议您查看有关它的OWASP页面 。 幸运的是&#xff0c;阻止CSRF攻击非常简单&#xff0c;我将向您展示它们的工…

windows命令行无法启动redis_windows系统安装redis

1、下载最新redis https://github.com/MicrosoftArchive/redis/releases我选择下载msi版本的2.双击下载包安装3.设置redis环境变量&#xff0c;把redis路径配置到系统变量path值中4启动redis&#xff0c;cmd进入安装好redis文件夹 输入&#xff1a;如果redis启动出错Creating S…