如果我希望从远程服务器获取数据,那么 JSONP 是我认为的首选工具。但我对我看到的一个例子感到困惑:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
dataType: 'jsonp',
data: 'p3=c',
jsonp: 'callback',
url: 'http://someserver.com/app?p1=a&p2=b',
success: function (data) {
console.log("data="+data);
$.each(data, function (i, r) {
console.log("i="+i);
console.log("r="+r);
});
},
});
});
</script>
我可以看到,在请求中,添加了一个回调参数,其值格式为 jQuery1234567890。当我查看处理该请求的应用程序时,它会从请求中提取回调参数并将要返回的 json 数据和相关括号一起包装起来,因此它最终会返回如下内容:
jQuery1234567890([{"x":"100","y":"101"},{"x":"200","y":"201"}])
所以我的第一个问题是:
(1) 应用程序是否正确地完成了它所拥有的功能?
(2) jQuery / JSONP 实际上为我们做了什么?
我假设 jQuery 会看到“jsonp”的数据类型,将脚本标签插入 DOM,然后浏览器会下载并执行脚本。如果是这样,jQuery 是否创建了函数 jQuery1234567890,其实现是将参数传递给成功函数?
(3)我的理解是否正确(我认为不正确)?
谢谢,
保罗