// 创建一个新的 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
HTTP 请求由 3 个部分组成, 正好和 XMLHttpRequest 相对应
请求行 open
xhr.open( 'post', '01.php' );
请求头 setRequestHeader
// post 请求需要设置头
xhr.setRequestHeader( 'Conent-Type' , 'application/x-www-form-urlencoed' );
// get 请求可以不设置请求头
请求主体 send
xhr.send( 'name=Jim&age=18' );
// get 可以传空, 因为在头的时候已经传过数据了
if( xhr.readyState == 4 && xhr.status == 200 ){
// 进行下一步操作, 如渲染页面
document.querySelector( '#result' ).innerHTML = xhr.responseText;
}
获取行状态 ( 包括行状态码和状态信息 )
xhr.status // 状态码
xhr.statusText // 状态码嘻嘻
获取响应头
xhr.getResponseHeader( 'Content-Type' );
xhr.getAllResponseHeaders();
获取响应主体
xhr.responseText // json, 文本 类型
xhr.responseXML // xml 类型
xhr.open()
发送请求, 可以是 get 或者 post 方式xhr.setRequestHeader()
设置请求头xhr.send()
发送请求主体, 如果是 get 方式使用 xhr.send(null)
, 因为在 open 中已经发送了请求主体xhr.onreadystatechange = functtion(){}
监听响应状态xhr.status
表示响应码, 如 200 表示成功xhr.statusText
表示响应信息. 如 okxhr.getAllResponseHeaders()
获取全部响应头信息xhr.getResponseHeader( 'key' )
获取指定响应头信息xhr.reponseText xhr.responseXML
都表示响应主体, 格式不同xhr.send(null)
发送请求主体xhr.send( 'name=itcast&age=10' )
发送请求主体 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);
}
}
//初始化
var xhr = new XMLHttpRequest();
//请求行
xhr.open("post","03 AjaxPost.php");
//请求头
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
//请求内容
xhr.send("username=rxt&password=1234");
//监听响应改变
xhr.onreadystatechange = function(){
/*什么时候才算是http通讯结束 在readyState=4的是 响应完成*/
/*什么是才算是通讯成 status 200 */
if(xhr.status ==200 && xhr.readyState == 4){
document.querySelector("div").innerHTML = xhr.responseText;
}
}
XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。XML 可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。您创建的文件,或文档实例 由元素(标记)和内容构成。
格式
<root>
<arrayList>
<array>
<src>images/banner.jpgsrc>
<newPirce>12.00newPirce>
<oldPrice>30.00oldPrice>
array>
<array>
<src>images/banner.jpgsrc>
<newPirce>12.00newPirce>
<oldPrice>30.00oldPrice>
array>
arrayList>
root>
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数据在不同语言进行传输时,类型为字符串,不同的语言各自也都对应有解析方法,需要解析完成后才能读取
json_decode() : 将 json 字符串 转换为 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 '
';
$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 '
';
/*将json字符转化成php数组*/
$array_json = json_decode($json_array);
echo $array_json;
echo '
';
?>
JSON 兼容处理 : json2.js
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);
}
}
/*
* 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);
}
$.ajax({
type : 'get',
url : 'getCode.php',
data : {'mobile' : phone},
dataType : 'json',
beforeSend : function(){
},
success : function(info){
}
});
// 简洁语法
{{if admin}}
{{include 'admin_content'}}
{{each list}}
<div>{{$index}}. {{$value.user}}div>
{{/each}}
{{/if}}
// 编写模板
<script id="test" type="text/html">
<h1>{{title}}h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}li>
{{/each}}
ul>
script>
// 渲染数据
var data = {
title: '标签',
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;
// 模板 js 原生语法
<%=title%>
<%for(i = 0; i < list.length; i ++) {%>
条目内容 <%=i + 1%> :<%=list[i]%>
<%}%>
<% 与 %> 符号包裹起来的语句则为模板的逻辑表达式。
对内容编码输出:<%=content%>
不编码输出:<%=#content%>
<script>
function fuc(data){
console.log(data.name);
}
script>
<script src="http://www.guangzhou.com/api.php?callback=fuc">script>
{foo1:"bar1",foo2:"bar2"}
转换为&foo1=bar1&foo2=bar2
。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 }
function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 }
function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数
function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 }
function(data, type){ //返回处理后的数据 return data; }
{jsonp:'onJsonPLoad'}
会导致将"onJsonPLoad=?"
传给服务器。案例代码:
$(function(){
$('#send').click(function(){
$.ajax({
type: "GET",
url: "test.json",
data: {
username:$("#username").val(), content:$("#content").val()
},
dataType: "json",
success: function(data){
$('#resText').empty(); //清空resText里面的所有内容
var html = '';
$.each(data, function(commentIndex, comment){
html += ';
});
$('#resText').html(html);
}
});
});
});
' + comment['username'] + ':
+ comment['content'] + '