解释一下jQuery的$.getJSON跨域Ajax方法
2012-08-05 23:39
519 查看
今天研究跨域Ajax,看到网上的教程都是给了一个例子,不知道使用$.getJSON实现跨域Ajax的关键在哪里,经过一段时间的“研究”,现将成果写一下。
客户端:
使用$.getJSON()在传输第一个参数,也就是url时,如果是跨域请求一定要有一个参数的值为“?”,如:
jQuery在发送请求时会将这个“?”替换为一个唯一的字符串,如下图
并且声明一个与这个字符串名称相同变量,将传入的回掉函数赋值给这个变量。
服务端:
服务端一定是动态的程序,不能是静态的文本文件,因为服务端要接收到传过来的函数名,就是上图中callback的值jQuery172031288272701203823_1344179936251。
然后服务端构造一个函数调用型的字符串,将需要发送给客户端的值做为参数。
也就是:jQuery172031288272701203823_1344179936251([这里传参数JSON数据])。
上PHP代码。
Ajax得到的数据:
客户端得到这个数据之后就执行这条语句,由于前面已经将$.getJSON()传入的回掉函数指定了同样的函数名,此时就会调用传入的函数,并将数据传入。
具体的跨域请求是利用了页面中可以引入其他域的js文件这个性质,在页面中创建一个script节点,将他的src属性指向其他域的动态文件。浏览器就会加载这个文件并执行其中的脚本。
客户端:
使用$.getJSON()在传输第一个参数,也就是url时,如果是跨域请求一定要有一个参数的值为“?”,如:
$.getJSON( "http://202.196.35.41/json.php?callback=?", function(data){ alert(data); } };
jQuery在发送请求时会将这个“?”替换为一个唯一的字符串,如下图
并且声明一个与这个字符串名称相同变量,将传入的回掉函数赋值给这个变量。
服务端:
服务端一定是动态的程序,不能是静态的文本文件,因为服务端要接收到传过来的函数名,就是上图中callback的值jQuery172031288272701203823_1344179936251。
然后服务端构造一个函数调用型的字符串,将需要发送给客户端的值做为参数。
也就是:jQuery172031288272701203823_1344179936251([这里传参数JSON数据])。
上PHP代码。
<?php header('Content-Type:text/javascript; charset=utf-8'); class User{ public $id; public $name; public function __construct($id, $name){ $this->id = $id; $this->name = $name; } } $users = array(new User(1, 'admin'), new User(2, 'root')); echo $_REQUEST['callback'].'('.json_encode($users).')';
Ajax得到的数据:
jQuery172031288272701203823_1344179936251([{"id":1,"name":"admin"},{"id":2,"name":"root"}])
客户端得到这个数据之后就执行这条语句,由于前面已经将$.getJSON()传入的回掉函数指定了同样的函数名,此时就会调用传入的函数,并将数据传入。
具体的跨域请求是利用了页面中可以引入其他域的js文件这个性质,在页面中创建一个script节点,将他的src属性指向其他域的动态文件。浏览器就会加载这个文件并执行其中的脚本。
相关文章推荐
- jquery的ajax和getJson跨域获取json数据的实现方法
- 前端使用Jquery的getJSON方法,后台使用PHP,解决IE和火狐Firefox中存在的跨域ajax请求问题。
- jquery的ajax和getJson跨域获取json数据的实现方法
- jquery的ajax和getJson跨域获取json数据的实现方法
- jquery的ajax和getJson跨域获取json数据的实现方法
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- JQuery 中的ajax的方法 ($.ajax,$.post.$get,$.jgetJSON)
- Ajax与jQuery-利用$.get()和$.post()方法传递html,xml,json数据
- jQuery中的Ajax---6.5.3: $.getScript()方法和$.getJson()方法(***)
- 夺命雷公狗jquery---62通过$.getJSON来解决Ajax跨域请求问题
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 通过jquery的$.getJSON自己做一个跨域ajax请求试验
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 使用Jquery中getJSON方法实现跨域
- 黄聪:使用$.getJSON解决ajax跨域访问 JQuery 的跨域方法(服务器端为wordpress程序)
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法
- 深入理解JQuery中$.get()、$.post()、$.getJSON()、$.ajax()方法