在我关于是继续使用 mootools 还是跳到 jQuery 的永恒内部斗争中,我在 jQuery 文档中发现了一些引起我注意的东西,那就是 jQuery 可以向不同的域请求 JSON,这通常是被禁止的通过浏览器。
我已经看到了一些跨子域的解决方法,但从未见过跨域,我真的很兴奋,首先我以为我与服务器相关,但尝试了更多一点,我发现做同样的 JSON Mootools 上的 jQuery 文档请求不起作用!
这有效 jQuery:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
这不 穆工具:
var jsonRequest = new Request.JSON({url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", onComplete: function(person, responseText){
alert(responseText);
}}).get({});
我如何复制这种行为?是什么原因造成的?
jQuery 文档:http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols 文档:http://mootools.net/docs/Request/Request.JSON
最佳答案
页面上说它是 JSONP。
JSONP 是一种技巧,服务器不返回通常的响应,而是将其包装到用户提供的方法的方法调用中,例如而不是:
{"foo": "bar", "baz":"bah"}
它将返回:
temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});
jQuery 定义临时回调函数并插入 <script src="..."></script>
元素,不受同源策略限制。
加载脚本后,就会执行该函数,仅此而已。
缺点是,如果服务器是邪恶的(或被黑客攻击的),它现在可以在您的浏览器中执行任意代码。
更多信息here .
关于jquery - jQuery 如何进行跨域 ajax 调用以及如何使用 mootools 复制它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/726704/