JSON

json教程:全面详解JSON(2)

字号+ 作者:H5之家 来源:H5之家 2015-09-16 12:07 我要评论( )

先在网页中引用json2.js,然后使用json2所提供的parse方法: varjsonData={familys=[{name:Bruce,age:18,sex:male}, {name:Sherry,age:16,sex:famale}]} varjsonObj=JSON.parse(jsonData);//将JSON格式数据转为对象

  先在网页中引用json2.js,然后使用json2所提供的parse方法:

var jsonData = "{'familys'=[{'name' : 'Bruce', 'age' : 18, 'sex' :  'male'},      {'name' : 'Sherry','age' : 16, 'sex' : 'famale'}]}"     var jsonObj = JSON.parse(jsonData); // 将JSON格式数据转为对象      alert(jsonObj.familys[0].name); // Bruce      alert(jsonObj.familys[1].age); // 16

  这样之后,我们就能在Ajax函数将服务器传回的JSON格式做解析:

 

 // ...   if(xmlHttp.readyState == 4 && xmlHttp.status == 200){   var jsonObj = JSON.parse(xmlHttp.responseText);   // ...   }

  使用了JSON来交换数据后,你会发现相关Ajax的源程序变简单了,例如:

  

  

// 原始Ajax函数   function Do(xmlHttp) {   if(xmlHttp.readyState == 4 && xmlHttp.status == 200){   var familys = xmlHttp.responseXML.getElementsByTagName('familys');   for (var i = 0; i < familys.length; i++) {   var name =  familys.getElementsByTagName('name')[0].firstChild.nodeValue;   var age = familys.getElementsByTagName('age')[0].firstChild.nodeValue;   var sex = familys.getElementsByTagName('sex')[0].firstChild.nodeValue;   }   }   }   // 使用JSON后的Ajax函数   function Do(xmlHttp) {   if(xmlHttp.readyState == 4 && xmlHttp.status == 200){   var jsonObj = JSON.parse(xmlHttp.responseText);   var name = jsonObj.familys[0].name;   var age = jsonObj.familys[0].age;   var sex = jsonObj.familys[0].sex;   }

 

  不只有变简单,而且程序的撰写更直觉。另外,你也可以把Object转为JSON:

  // 声明一个familys Array,里面包含两个Object   var familys = [   {'name' : 'Bruce',   'age' : 18,   'sex' : 'male'},   {'name' : 'Sherry',   'age' : 16,   'sex' : 'famale'}   ];   var jsonData = JSON.stringify(familys);

  更快速的是使用jQuery的$getJSON,但这超出了JSON的讨论了。以上是接收解析JSON,那如果我要传送JSON给服务器呢?也简单:

  

var xhr = request(); // 建立XHR对象   xhr.onreadystatechange = handler;   xhr.open('POST',URL);   xhr.setRequestHeader('Content-Type', 'application/json'); // 这里是重客人   xhr.send(json);

  记得使用'application/json'来传送即可,但一般服务器端是看不懂JSON,不过没关系,在JSON官网最下方或上网找一下,已经有很多高手分享出来可以在服务器解析JSON的元件或Source Code,让JSON数据传送到服务器后,依然方便好用。

  使用JSONP进行跨站请求

  这个主题比较生硬,如果你不会使用到跨网站请求,可以先跳过。

  一般而言,在网站中是不太充许你去存取其他网站的内容,但不是百分百,例如iframe或img就是很好的例子,但其他HTML、Javascript就都不太能做这种事,例如XMLHttpRequest,这是一种保护。但现今网页已经很少能不去存取其他网站,例如挂个‘噗浪’‘fb’…,但偏偏XMLHttpRequest不充许跨网站去存取。

  后来有人发展出了JSONP(JSON with Padding),JSONP利用Javascript的callback机制,绕过Browser的安全限制,关键在动态载入

  这差不多就是JSONP的基础了,通过动态建立script及Javascript callback,来载入跨网站JSON数据。

  最后我们来看整个JSONP的运作流程示意源程序,注意程序的流程,Step 1在Client--> Step 2在Server--> Step 3 回到Client。

  

Client端:*.html   // 使用jQuery   // Step 1:送出JSONP请求,   $(function(){   $('#send').click(function(){   // 最后必须是 &callback=funcion 或 &jsoncallback=function 结尾   var URL =  "?id=1&name=Bruce&jsoncallback=dosomething";   $.ajax({   type : 'GET',   dataType : 'jsonp', // 记得是jsonp   url : URL,   error : function(xhr, error){ alert('Ajax request error.');}   })   })   });   // Step 3:收到服务器回应后(response.write(jsonp)),执行的callback的function   function dosomething(jsonData){   // jsonData会取得Server传回{...json data ...}   alert(jsonData.name);   alert(jsonData.age);   alert(jsonData.sex);   }

  在建立非同请求时,在网址最后加上‘&callback=函数名称’或‘&jsoncallback=函数名称’,就可以取得其他域的数据并执行后续callback的函数。

  Server端 *.aspx

 

 ' Step 2:进行相关处理   '接收到的id & name处理...   ' 以下是重客人,组合出function及json数据,然后返回   Dim jsonp AS String =   ' dosomething是 function name   ' {...} 是json data   jsonp = "dosomething({ _   ' ... json data ... _   })"   Response.Write(jsonp)

  参考资料:

  Javascript

   (官方网站,一定要看)

  https://github.com/douglascrockford/JSON-js (请下载json2.js使用)

   (JSON介绍)

  ?s=jsonp

   (很多Javascript数据)

   (可以下载到Visual Basic 2008解析JSON的Source Code,可自行编译为*.DLL,但注册及成为正式用户需要一些日子,我约二~三周后才成为RegisteredUser,然后才下载到PW.JSON Library)


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php CI 实战教程:[5]用curl获取json并解析

    php CI 实战教程:[5]用curl获取json并解析

    2016-02-26 17:00

  •  JSON入门级学习总结-JSON数据结构

    JSON入门级学习总结-JSON数据结构

    2016-02-25 11:05

  • Android解析Json速度最快的库:json

    Android解析Json速度最快的库:json

    2016-02-13 18:00

  • JavaScript转换与解析JSON方法实例详解第1/2页

    JavaScript转换与解析JSON方法实例详解第1/2页

    2016-02-10 21:25

网友点评
h