ajax理解

2023-09-06 0 492

一、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方式而则核对要推送的统计数据
ajax理解

2. 赢得响应

赢得积极响应的两个方式(赢得哪种类别的积极响应值)

ajax理解

窃听伺服器对允诺的积极响应:readyState特性

ajax理解

两个单纯的实例:

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理解
$.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

五、处理跨域问题

ajax理解

不同域的例子:

ajax理解

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); // 接受的允诺方式

然后前台服务代码能不做改动,就能同时实现跨域访问了

参考教程

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务