解释一下jQuery的$.getJSON跨域Ajax方法

 

今天研究跨域Ajax,看到网上的教程都是给了一个例子,不知道使用$.getJSON实现跨域Ajax的关键在哪里,经过一段时间的“研究”,现将成果写一下。

 

客户端:

使用$.getJSON()在传输第一个参数,也就是url时,如果是跨域请求一定要有一个参数的值为“?”,如:

1 $.getJSON(
2     "http://202.196.35.41/json.php?callback=?",
3     function(data){
4         alert(data);
5     }
6 };

jQuery在发送请求时会将这个“?”替换为一个唯一的字符串,如下图

并且声明一个与这个字符串名称相同变量,将传入的回掉函数赋值给这个变量。

 

服务端:

服务端一定是动态的程序,不能是静态的文本文件,因为服务端要接收到传过来的函数名,就是上图中callback的值jQuery172031288272701203823_1344179936251。

然后服务端构造一个函数调用型的字符串,将需要发送给客户端的值做为参数。

也就是:jQuery172031288272701203823_1344179936251([这里传参数JSON数据])。

上PHP代码。

复制代码
 1 <?php
 2     header('Content-Type:text/javascript; charset=utf-8');
 3     class User{
 4         public $id;
 5         public $name;
 6         public function __construct($id, $name){
 7             $this->id = $id;
 8             $this->name = $name;
 9         }
10     }
11     $users = array(new User(1, 'admin'), new User(2, 'root'));
12     
13     echo $_REQUEST['callback'].'('.json_encode($users).')';
复制代码

Ajax得到的数据:

jQuery172031288272701203823_1344179936251([{"id":1,"name":"admin"},{"id":2,"name":"root"}])

客户端得到这个数据之后就执行这条语句,由于前面已经将$.getJSON()传入的回掉函数指定了同样的函数名,此时就会调用传入的函数,并将数据传入。

 

具体的跨域请求是利用了页面中可以引入其他域的js文件这个性质,在页面中创建一个script节点,将他的src属性指向其他域的动态文件。浏览器就会加载这个文件并执行其中的脚本。

posted @   fly2xiang  阅读(2425)  评论(6编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示