上一篇我们讲了早期的中心化数据格式,XML、SOAP、HTML。现在,让我们看看JSON和JSONP。JSONJSON(JavaScriptObjectNotation)由DouglasCrockford提出。他是一种基于JavaScript对象字面量的轻量级数据交换格式。我们可以将之前的XML书籍格式文件内容转换成如下JSON格式:,publisher:"SitePoint",price:{currency:"USD",amount:39.95}},{title:"jQuery:NovicetoNinja",url:"http://www.sitepoint.com/books/jquery1/",作者:“JEarleCastledine&CraigSharkie”,出版商:“SitePoint”,价格:{currency:“USD”,amount:29.95}},{title:“BuildYourOwnDatabaseDrivenWebsite”,url:“http://www.sitepoint.com/books/phpmysql4/",author:"KevinYank",publisher:"SitePoint",price:{currency:"USD",amount:39.95}}]这是一种通过对象表示一本书的方式,它有title,url,author、出版商和价格信息。price是一个子对象,它包含货币类型和价格。在JavaScript中处理JSON很容易。您可以使用浏览器的本机JSON.parse方法或DouglasCrockford的JSON-js库。即使这些都没有,你也可以使用javaScript的eval方法。无需额外编写数据处理方法:varjson=xhr.responseText;varbook=JSON.parse(json);alert(book[0].title);//firstbooktitlealert(book[1].url);//secondbookURL使用JSON的优点是:◆比XML轻很多,没有那么多多余的东西.◆JSON的可读性也很强,但通常返回是经过压缩的。与XML可以直接通过浏览器显示不同,浏览器需要使用一些插件才能显示JSON格式◆用JavaScript处理JSON非常简单◆其他语言如PHP对JSON也有很好的支持。JSON也有一些缺点:◆JSON不像XML那样在服务器端语言中得到广泛支持,但JSON.org提供了多种语言的库◆如果使用eval()来解析,则容易出现安全问题issues即便如此,JSON的优势还是很明显的。他是Ajax数据交互的理想数据格式。JSONP(JSON-p)如果您使用XMLHttpRequest调用JSONWeb服务,则返回的数据可以通过JSON.parse()或eval()进行处理。您还可以使用Ajax组件来插入脚本。比如将远程加载的脚本插入DOM节点,通过script标签调用:varscript=document.createElement("script");script.src="https://img.ydisp.cn/news/20220914/y0qtcxfdxnzdocument.getElementsByTagName("head")[0].appendChild(script);不同于XMLHttpRequest,插入script标签可以从其他服务获取数据在不同的源中。这对于流量分析、书签工具、小插件和广告系统来说是一个理想的选择。但是,返回的JSON数据通常作为本地代码立即执行。它不会被赋值给一个变量,因此以后无法访问它。但是,我们可以通过向网络服务传递一个回调参数来回调这个问题:varscript=document.createElement("script");script.src="https://img.ydisp.cn/news/20220914/wr3n2u311vsdocument.getElementsByTagName("head")[0].appendChild(script);这时候web服务通常会返回一个JSON数据包含在回调函数中,它是JSONP,或“带填充的JSON”,请参阅代码:MyDataHandler([{title:"ThePrinciplesofBeautifulWebDesign,2ndEdition",url:"http://www.sitepoint.com/books/design2/",author:"JasonBeaird",publisher:"SitePoint",price:{currency:"USD",amount:39.95}}...]);JSON对象下载后,作为参数传递给MyDataHandler()方法。JSON和JSONP已经是最流行的异步交互的数据格式。但是在压缩传输数据的时候size方面还是可以研究的。RockUX后面会讲到自定义数据返回。原文链接:https://img.ydisp.cn/news/20220914/qoi1mucfrx3.cfm/>查看本系列其他文章:Ajax和WEB服务数据格式:XMLSOAPHTML【编辑推荐】使用jQuery来简化Ajax开发使用Dojo实现Ajax请求:XHR、跨域等盘点Top10ASP.NETAjaxToolboxControls简化开发流程了解各种Ajax框架的适用性Ajax安全隐患将成为站点定时炸弹
