标签:
指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步。
其优势在于不阻塞程序的执行,从而提升整体执行效率。
XMLHttpRequest可以以异步方式的处理程序。
浏览器内建对象,用于在后台与服务器通信(交换数据) , 由此我们便可实现对网页的部分更新,而不是刷新整个页面。
/*js 内置的 http 请求对象 XMLHttpRequest*/
/*1.怎么使用 这个内置对象*/
var xhr = new XMLHttpRequest;
/*2.怎么样去组请求*/
/*请求的行*/
xhr.open(‘post‘,‘01.php‘);
/*请求头*/
//get 没有必要设置
//post 必须设置 Content-Type: application/x-www-form-urlencoded
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);
/*请内容*/
/*3.发送请求*/
xhr.send("name=xjj&age=10");
HTTP请求3个组成部分与XMLHttpRequest方法的对应关系
1、请求行
xhr.open(‘post‘,‘01.php‘);
2、请求头
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);
get请求可以不设置
3、请求主体
xhr.send("name=xjj&age=10");
get可以传空
注意书写顺序
HTTP响应是由服务端发出的,作为客户端更应关心的是响应的结果。
HTTP响应3个组成部分与XMLHttpRequest方法或属性的对应关系。
由于服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。
if(xhr.readyState == 4 && xhr.status == 200){
console.log(‘ok‘);
console.log(xhr.responseText);
/*把内容渲染在页面当中*/
document.querySelector(‘#result‘).innerHTML = xhr.responseText;
}
**readyState**
0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
onreadystatechange是Javascript的事件的一种,其意义在于监听XMLHttpRequest的状态
1、获取状态行(包括状态码&状态信息)
xhr.status 状态码
xhr.statusText 状态码信息
2、获取响应头
xhr.getResponseHeader(‘Content-Type‘);
xhr.getAllResponseHeaders();
3、响应主体
xhr.responseText
xhr.responseXML
我们需要检测并判断响应头的MIME类型后确定使用request.responseText或者request.responseXML
xhr.open() 发起请求,可以是get、post方式
xhr.setRequestHeader() 设置请求头
xhr.send() 发送请求主体get方式使用xhr.send(null)
xhr.onreadystatechange = function () {} 监听响应状态
xhr.status表示响应码,如200
xhr.statusText表示响应信息,如OK
xhr.getAllResponseHeaders() 获取全部响应头信息
xhr.getResponseHeader(‘key‘) 获取指定头信息
xhr.responseText、xhr.responseXML都表示响应主体
注:GET和POST请求方式的差异
1、GET没有请求主体,使用xhr.send(null)
2、GET可以通过在请求URL上添加请求参数
3、POST可以通过xhr.send(‘name=itcast&age=10‘)
4、POST需要设置
5、GET效率更好(应用多)
6、GET大小限制约4K,POST则没有限制
1、必须有一个根元素
2、不可有空格、不可以数字或.开头、大小写敏感
3、不可交叉嵌套
4、属性双引号(浏览器自动修正成双引号了)
5、特殊符号要使用实体
6、注释和HTML一样
虽然可以描述和传输复杂数据,但是其解析过于复杂并且体积较大,所以实现开发已经很少使用了。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<arrayList>
<array>
<src>images/banner.jpg</src>
<newPirce>12.00</newPirce>
<oldPrice>30.00</oldPrice>
</array>
<array>
<src>images/banner.jpg</src>
<newPirce>12.00</newPirce>
<oldPrice>30.00</oldPrice>
</array>
</arrayList>
</root>
<?php
header(‘Content-Type:text/xml;charset=utf-8‘);
/*以xml格式传输数据的时候要求响应内容格式是 text/xml*/
/*file_get_contents 获取文件内容*/
$xml = file_get_contents(‘01.xml‘);
/*输出xml内容*/
echo $xml;
?>
var xhr = new XMLHttpRequest;
xhr.open(‘get‘,‘01.php‘);
xhr.send(null);
xhr.onreadystatechange = function(){
if(xhr.status == 200 && xhr.readyState == 4){
/*获取到XML格式内容 放回的是DOM对象 document*/
var xml = xhr.responseXML;
/*通过选着器可以获取到xml的数据*/
console.log(xml.querySelectorAll(‘array‘)[0].querySelector(‘src‘).innerHTML);
}
}
即 JavaScript Object Notation,另一种轻量级的文本数据交换格式,独立于语言。
1、数据在名称/值对中
2、数据由逗号分隔(最后一个健/值对不能带逗号)
3、花括号保存对象方括号保存数组
4、使用双引号
[
{"src":"images/detail01.jpg","oldPrice":"10.12","newPrice":"130.00"},
{"src":"images/detail02.jpg","oldPrice":"1.00","newPrice":"11.00"},
{"src":"images/detail03.jpg","oldPrice":"100.00","newPrice":"1000.00"}
]
JSON数据在不同语言进行传输时,类型为字符串,不同的语言各自也都对应有解析方法,需要解析完成后才能读取
1、PHP解析方法
json_encode()、json_decode()
<?php
header(‘Content-Type:text/html;charset=utf-8‘);
/*以json格式传输数据的时候要求响应内容格式是 application/json*/
/*注意也可以不设置 但是这遵循的一个规范*/
/*file_get_contents 获取文件内容*/
$json = file_get_contents(‘01.json‘);
/*输出json内容*/
echo $json;
echo ‘<br><br>‘;
$array = array(
array(‘src‘=>‘images/detail01.jpg‘,‘newPrice‘=>‘12.00‘,‘oldPrice‘=>‘455.00‘),
array(‘src‘=>‘images/detail02.jpg‘,‘newPrice‘=>‘65.00‘,‘oldPrice‘=>‘878.00‘),
array( ‘src‘=>‘images/detail01.jpg‘,‘newPrice‘=>‘100.00‘,‘oldPrice‘=>‘1000.00‘)
);
/*将php数组转化成json字符*/
$json_array = json_encode($array);
echo $json_array;
echo ‘<br><br>‘;
/*将json字符转化成php数组*/
$array_json = json_decode($json_array);
echo $array_json;
echo ‘<br><br>‘;
?>
1、Javascript 解析方法
JSON对象 JSON.parse()、JSON.stringify();
JSON兼容处理json2.js
总结:JSON体积小、解析方便且高效,在实际开发成为首选。
var xhr = new XMLHttpRequest;
xhr.open(‘get‘,‘01.php‘);
xhr.send(null);
xhr.onreadystatechange = function(){
if(xhr.status == 200 && xhr.readyState == 4){
/*获取仅仅是字符串*/
var text = xhr.responseText;
/*需要把字符串转化成JSON对象*/
var json_obj = JSON.parse(text);
console.log(json_obj);
/*我们也可以把JSON对象转化成字符串*/
var json_str = JSON.stringify(json_obj);
console.log(json_str);
}
}
关于IE的兼容方面,了解即可。
function XHR() {
var xhr;
try {
xhr = new XMLHttpRequest();
}
/*如果 try内的程序运行错误 抛出异常 捕捉异常 上面程序当中运行的错误*/
catch(e) {
/*在不同的IE版本下初始 ActiveXObject 需要传入的标识*/
var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0;i<IEXHRVers.length;i++) {
try {
xhr = new ActiveXObject(IEXHRVers[i]);
}
catch(e) {
/*如果出现错误的时候 停止当次的循环*/
continue;
}
}
}
return xhr;
}
/**
* ITCAST WEB
* Created by zhousg on 2016/5/24.
*/
/*
* 1. 请求的类型 type get post
* 2. 请求地址 url
* 3. 是异步的还是同步的 async false true
* 4. 请求内容的格式 contentType
* 5. 传输的数据 data json对象
*
* 6.响应成功处理函数 success function
* 7.响应失败的处理函数 error function
*
* 这些都是动态参数 参数对象 options
* */
/*封装一个函数*/
window.$ = {};
/*申明一个ajax的方法*/
$.ajax = function(options){
if(!options || typeof options != ‘object‘){
return false;
}
/*请求的类型*/
var type = options.type || ‘get‘;/*默认get*/
/*请求地址 */
var url = options.url || location.pathname;/*当前的地址*/
/*是异步的还是同步的 */
var async = (options.async === false)?false:true;/*默认异步*/
/*请求内容的格式 */
var contentType = options.contentType || "text/html";
/*传输的数据 */
var data = options.data || {};/*{name:‘‘,age:‘‘}*/
/*在提交的时候需要转成 name=xjj 这种格式*/
var dataStr = ‘‘/*数据字符串*/
for(var key in data){
dataStr += key+‘=‘+data[key]+‘&‘;
}
dataStr = dataStr && dataStr.slice(0,-1);
/*ajax 编程*/
var xhr = new XMLHttpRequest();
/*请求行*/
/*(type==‘get‘?url+‘?‘+dataStr:url)判断当前的请求类型*/
xhr.open(type,(type==‘get‘?url+‘?‘+dataStr:url),async);
/*请求头*/
if(type == ‘post‘){
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);
}
/*请求主体*/
/*需要判断请求类型*/
xhr.send(type==‘get‘?null:dataStr);
/*监听响应状态的改变 响应状态*/
xhr.onreadystatechange = function(){
/*请求响应完成并且成功*/
if(xhr.readyState == 4 && xhr.status == 200){
/*success*/
var data = ‘‘;
var contentType = xhr.getResponseHeader(‘Content-Type‘);
/*如果我们服务器返回的是xml*/
if(contentType.indexOf(‘xml‘) > -1){
data = xhr.responseXML;
}
/*如果我们的服务器返回的是json字符串*/
else if(contentType.indexOf(‘json‘) > -1){
/*转化json对象*/
data = JSON.parse(xhr.responseText);
}
/*否则的话他就是字符串*/
else{
data = xhr.responseText;
}
/*回调 成功处理函数*/
options.success && options.success(data);
}
/*计时请求xhr.status不成功 他也需要的响应完成才认作是一个错误的请求*/
else if(xhr.readyState == 4){
/*error*/
options.error && options.error(‘you request fail !‘);
}
}
}
$.post = function(options){
options.type = ‘post‘;
$.ajax(options);
}
$.get = function(options){
options.type = ‘get‘;
$.ajax(options);
}
标签:
原文地址:http://www.cnblogs.com/huqinhan/p/5702036.html