使用JSONP的.ajax()的基本示例是什么?
使用JSONP的.ajax()的基本示例是什么?
请问有人可以帮我解决如何开始使用JSONP吗?
代码:
$('document').ready(function() { var pm_url = 'http://twitter.com/status'; pm_url += '/user_timeline/stephenfry.json'; pm_url += '?count=10&callback=photos'; var photos = function (data) { alert(data); }; $.ajax({ url: pm_url, dataType: 'jsonp', jsonpCallback: 'photos', jsonp: false, }); });
示例:http://jsfiddle.net/R7EPt/6/
根据文档所述,应该会弹出一个提示框,但似乎没有弹出(但也没有产生任何错误)。
谢谢。
使用jQuery处理JSONP的方式甚至更加容易
$.getJSON("http://example.com/something.json?callback=?", function(result){ //response data are now in the result variable alert(result); });
URL末尾的?
告诉jQuery这是一个JSONP请求而不是JSON请求。jQuery会自动注册和调用回调函数。
有关更多详细信息,请参阅jQuery.getJSON文档。
JSONP实际上是一种简单的技巧,用于克服XMLHttpRequest同源策略。(您知道无法向不同域发送AJAX(XMLHttpRequest)请求。)
因此,我们必须使用script HTML标签,而不是使用XMLHttpRequest,因为使用HTML标签的js可以从另一个域获取数据。听起来很奇怪?
事情是这样的——原来script标签可以以类似于XMLHttpRequest的方式使用!看看这个:
script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://www.someWebApiServer.com/some-data";
加载数据后,结果会如下所示:
不过这有点不方便,因为我们必须从script标签中获取这个数组。因此,JSONP的创建者认为以下方式更好(确实是这样):
script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://www.someWebApiServer.com/some-data?callback=my_callback";
注意那里的my_callback函数?因此-当JSONP服务器接收到您的请求并找到回调参数时,它将返回此内容,而不是纯JS数组:
my_callback({['some string 1', 'some data', 'whatever data']});
看到利润在哪里了吗:现在我们得到了自动回调(my_callback),一旦我们获取数据就会触发回调。这就是关于JSONP的全部:它是回调和脚本标签。
注意:
这些是JSONP使用的简单示例,这些不是生产就绪脚本。
原始JavaScript演示(使用JSONP的简单Twitter feed):
基本的jQuery示例(使用JSONP的简单Twitter feed):
JSONP代表带填充的JSON。(技术名称非常不准确,因为它与大多数人想象中的“填充”实际上没有任何关系。)