一、当网页需要有多个XMLHttpRequest对象时,可以使用Callback 函数,callback 函数是一种以参数形式传递给另一个函数的函数。

<html>
<head>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("/ajax/test1.txt",function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}
</script>
</head>
<body> <div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">通过 AJAX 改变内容</button> </body>
</html>

  上例中,在myFunction()中调用loadXMLDoc函数,传递两个参数,一个是请求用的网址,另外一个是callback函数,用于在该XMLRequest响应状态改变时调用。该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同)。

  二、JSON: JavaScript Object Notation(JavaScript 对象表示法)

  JSON 是存储和交换文本信息的语法。类似 XML。

  JSON 比 XML 更小、更快,更易解析。JSON 是轻量级的文本数据交换格式。JSON 独立于语言,JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。JSON 具有自我描述性,更易理解。

  JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

  eval()函数可计算某个字符串,并执行其中的的 JavaScript 代码。

  一个简单的示例,读取创建JSON对象以及读取JSON对象中的数据。

<html>
<body>
<h2>在 JavaScript 中创建 JSON 对象</h2> <p>
Name: <span id="jname"></span><br />
Age: <span id="jage"></span><br />
Address: <span id="jstreet"></span><br />
Phone: <span id="jphone"></span><br />
</p> <script type="text/javascript">
var JSONObject= {
"name":"Bill Gates",
"street":"Fifth Avenue New York 666",
"age":56,
"phone":"555 1234567"};
document.getElementById("jname").innerHTML=JSONObject.name
document.getElementById("jage").innerHTML=JSONObject.age
document.getElementById("jstreet").innerHTML=JSONObject.street
document.getElementById("jphone").innerHTML=JSONObject.phone
</script> </body>
</html>
与XML相同处 与XML不同处
JSON 是纯文本 没有结束标签
JSON 具有“自我描述性”(人类可读) 更短
JSON 具有层级结构(值中存在值) 读写的速度更快
JSON 可通过 JavaScript 进行解析 能够使用内建的 JavaScript eval() 方法进行解析
JSON 数据可使用 AJAX 进行传输 使用数组,不使用保留字

  对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

  使用 XML步骤:读取 XML 文档、使用 XML DOM 来循环遍历文档、读取值并存储在变量中。

  使用 JSON步骤:读取 JSON 字符串、用 eval() 处理 JSON 字符串。

  JSON 语法是 JavaScript 对象表示法语法的子集。JSON 语法规则:数据在名称/值对中、数据由逗号分隔、花括号保存对象、方括号保存数组。

  JSON 数据的书写格式是:名称/值对。

  名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"firstName" : "John",等价于javascript的:firstName = "John"。

  JSON 值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在方括号中)、对象(在花括号中)、null。

  JSON 对象在花括号中书写,对象可以包含多个名称/值对:{ "firstName":"John" , "lastName":"Doe" },等价于javascript的firstName = "John";lastName = "Doe"。

  在javascript中,创建JSON数组对象并访问数组对象的方式如下:

<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p>First Name: <span id="fname"></span></p> <script>
var employees = [
{ "firstName" : "John" , "lastName" : "Doe" },
{ "firstName" : "Anna" , "lastName" : "Smith" },
{ "firstName" : "Peter" , "lastName" : "Jones" }, ];
employees[1].firstName="Jonatan";
document.getElementById("fname").innerHTML=employees[1].firstName;
</script> </body>
</html>

  JSON中包括数组的写法:

{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}

  JSON 文件的文件类型是 ".json",JSON 文本的 MIME 类型是 "application/json"。

  JSON的使用:JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

  下面通过解析一个JSON对象字符串来演示如何使用JSON对象。

  一个JSON字符串对象:

var txt = '{ "employees" : [' +
'{ "firstName":"Bill" , "lastName":"Gates" },' +
'{ "firstName":"George" , "lastName":"Bush" },' +
'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';

  单引号用于嵌套双引号。

  由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

  var obj = eval ("(" + txt + ")");

  在网页中使用 JavaScript 对象:

<html>
<body>
<h2>通过 JSON 字符串来创建对象</h3>
<p>
First Name: <span id="fname"></span><br />
Last Name: <span id="lname"></span><br />
</p>
<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"George","lastName":"Bush" },' +
'{"firstName":"Thomas","lastName":"Carter" }]}'; var obj = eval ("(" + txt + ")"); document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
</script>
</body>
</html>

  JSON 解析器:使用javascript中的eval() 函数,可编译并执行任何 JavaScript 代码。但是这隐藏了一个潜在的安全问题。

  使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

  在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。

  较新的浏览器和最新的 ECMAScript (JavaScript) 标准中均包含了原生的对 JSON 的支持。

  JSON解析器用法:

<html>
<body>
<h2>通过 JSON 字符串来创建对象</h3>
<p>
First Name: <span id="fname"></span><br />
Last Name: <span id="lname"></span><br />
</p>
<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"George","lastName":"Bush" },' +
'{"firstName":"Thomas","lastName":"Carter" }]}'; obj = JSON.parse(txt); document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
</script>
</body>
</html>

  三、JSONP 

  Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

  为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

  同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。

  如客户想访问 : http://www.w3cschool.cc/try/ajax/jsonp.php?jsonp=callbackFunction。

  假设客户期望返回JSON数据:["customername1","customername2"]。

  真正返回到客户端的数据显示为: callbackFunction(["customername1","customername2"])。

  在客户端是需要实现callbackFunction来获取数据的。

  四、XMLHttpRequest对象的属性与方法

  属性:

onreadystatechange 制定readyState属性改变时的时间处理句柄,只写。
readyState 返回当前请求的状态,只读。
responseBody 将回应信息正文以unsigned byte未经解码的数组形式返回,只读。
responseStream 以Ado Stream对象的形式返回相应信息,只读。
responseText 将响应信息作为字符串返回,只读。
responseXML 将相应信息格式化为Xml Document对象并返回,只读。
status 返回当前请求的http状态码,只读。
statusText 返回当前请求的响应行状态,对应状态码,只读。

  方法:

abort 取消当前请求
getAllResponseHeaders() 获取响应的所有http头,每个http头名称和值用冒号分割,并以\r\n结束。
getResponseHeader(bstrHeader) 从相应信息中获取指定的http头。
open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword) 创建一个新的http请求,并指定此请求的方法,URL以及验证。最后两个用于填写服务器用户名和密码。
send(varBody) 发送请求到http服务器并接受回应。
setRequestHeader(bstrHeader, bstrValue) 单独指定请求的某个http头。

  详解:

  readyState的五种状态:

  • 0: 请求未初始化,对象已建立,但是尚未初始化(尚未调用open方法)
  • 1: 对象已建立,尚未调用send方法
  • 2: send方法已调用,但是当前的状态及http头未知
  • 3: 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误
  • 4: 请求已完成,且响应已就绪,数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

  status的所有代码

  • 100:Continue
  • 101:Switching protocols
  • 200:OK
  • 201:Created
  • 202:Accepted
  • 203:Non-Authoritative Information
  • 204:No Content
  • 205:Reset Content
  • 206:Partial Content
  • 300:Multiple Choices
  • 301:Moved Permanently
  • 302:Found
  • 303:See Other
  • 304:Not Modified
  • 305:Use Proxy
  • 307:Temporary Redirect
  • 400:Bad Request
  • 401:Unauthorized
  • 402:Payment Required
  • 403:Forbidden
  • 404:Not Found
  • 405:Method Not Allowed
  • 406:Not Acceptable
  • 407:Proxy Authentication Required
  • 408:Request Timeout
  • 409:Conflict
  • 410:Gone
  • 411:Length Required
  • 412:Precondition Failed
  • 413:Request Entity Too Large
  • 414:Request-URI Too Long
  • 415:Unsupported Media Type
  • 416:Requested Range Not Suitable
  • 417:Expectation Failed
  • 500:Internal Server Error
  • 501:Not Implemented
  • 502:Bad Gateway
  • 503:Service Unavailable
  • 504:Gateway Timeout
  • 505:HTTP Version Not Supported

关于AJAX与JSON的杂记的更多相关文章

  1. ASP.NET 5 - $.ajax post JSON.stringify(para) is null

    JavaScript 代码: var para = {}; para.id = $("#ad-text-id").val(); para.title = $("#ad-t ...

  2. qt qml ajax 获取 json 天气数据示例

    依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...

  3. ajax将json写到table中去

    查询条件: <table style="width: 100%;border-collapse: collapse;" > <tr> <th styl ...

  4. ajax获取json对象

    ajax获取json对象 ajax获取json数据,都是一个原理,设置response 的Content-Type:application/json,这样浏览器自动会解析为json对象 $result ...

  5. Ajax与json在前后端中的细节解惑

    ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...

  6. Ajax与Json的一些总结

    Ajax与Json AJAX=异步javaScript 和XML AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不 ...

  7. ajax返回JSON时的处理方式

    JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). json_encode() 该函数主要用来将数组和对象, ...

  8. JQuery处理json与ajax返回JSON实例

    一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内 ...

  9. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

随机推荐

  1. linux系统无法挂载U盘

    插上U盘 [ 2407.650440] usb 1-3.3: new high speed USB device number 7 using s5p-ehci [ 2407.887332] usb ...

  2. (转)Makefile经典教程(掌握这些足够)

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...

  3. PHP 判断手机号归属地 和 运营商的免费接口

    在项目开发的时候,需要去查询又一批手机号或者固话的具体信息(归属地 运营商) 就需要写一个脚本,来批量请求接口来得到我们想要的数据 学习源头:https://blog.csdn.net/shaerdo ...

  4. composer安装特别慢的解决方案

    在项目开发的时候 有许多新的依赖要按照 就需要用到composer 但是由于国内安装下载速度贼慢(国外的网站连接速度太慢,并且随时可能被墙) 安装一个excel扩展(composer require ...

  5. FTP for win7

    In Windows 7, you can share files on home network easily using Home Group but creating an FTP server ...

  6. 【转】JMeter代理录制脚本

    JMeter代理录制脚本 使用JMeter代理录制脚本的过程如下: 1.启动JMeter,在测试计划中添加“线程组”. 2.在“线程组”中添加“HTTP请求默认值”,参数设定如下: 3.在“”中添加“ ...

  7. Spring Session实现Session共享下的坑与建议

    相信用过spring-session做session共享的朋友都很喜欢它的精巧易用-不依赖具体web容器.不需要修改已成项目的代码.笔者在使用spring-session的过程中也对spring-se ...

  8. log4net 使用总结- (3)在ASP.NET MVC 中使用

    把输出到sqlserver数据库中. 输出到数据库中和文件中类似,具体配步骤如下 第一步.创建数据库 CREATE TABLE [dbo].[Log] ( [Id] [int] IDENTITY (1 ...

  9. virsh使用qemu+tcp访问远程libvirtd

    因为ssh的不能访问 所以使用tcp进行对远程libvirtd进行连接访问,例如 virsh -c qemu+tcp://example.com/system 修改文件vim /etc/sysconf ...

  10. js获取用户实时地理位置

    js获取用户实时地理位置 if(navigator.geolocation) { var id = navigator.geolocation.watchPosition(function(posit ...