JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然,究其本质还是通过JSON.NET标签动态加载js,似乎这是实现真正跨域的***方法。下面进行分析研究。
1、getJSON的用法JQuery手册已经写得很详细,参考手册就可以了,很简单。需要指出的一点是getJSON利用的jsonp需要客户端与服务端作出配合。#t#
2、客户端传递的URL里要包含callback变量,以形如callback=?的形式结尾。(jquery会随机生成一个字符串替换?传递给服务端),服务端获取客户端传递的callback的值callbackValue,和需要传递的json字符串构成 JSON.NET’(’.json.’)'传回给客户端(示例为php字符串连接方式,其他语言类似)
- 一、可以通过Javascript中的eval函数把符合一定格式的字符串转化成JSON对象
- <script language="javascript">
- function ShowJsonString()
- {
- response = (
- "[{ name: 'Joe', age: '30', gender: 'M'},{ name: 'Chandler', age: '32', gender: 'M'},{ name: 'Rose', age: '31', gender: 'M'}]" //字符串形式
- );
- var response1 = "({ name: 'Vicson', age: '30', gender: 'M'})"; //字符串形式,这里的小括号不能少
- json = eval(response);
- json1 = eval(response1);
- alert(json[0].name + "," + json[1].age + "," +json[2].gender);
- alert(json1.name);
- }
- ShowJsonString();
- </script>
- 二、直接定义JSON对象
- <script language="javascript">
- function ShowJsonObject()
- {
- var user =
- {
- username:"andy",
- "age":20,
- "info": { "tel": "25003614", "cellphone": "882"},
- "address":
- [
- {city:"shenzhen","postcode":"0755"},
- {"city":"guangzhou","postcode":"020"}
- ] //address是一个数组
- } //对象形式
- alert(user.username);
- alert(user.age);
- alert(user.info.cellphone);
- alert(user.address[0].city);
- alert(user.address[0].postcode);
- }
- ShowJsonObject();
- </script>
JSON.NET的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。