在我永恒的内部斗争中,关于是否继续使用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;
});
});
这不是 Mootools的:
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 Doc:http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols Doc:http://mootools.net/docs/Request/Request.JSON
答案 0 :(得分:11)
在页面上说它是JSONP。
JSONP是一种技巧,其中服务器将其包装到用户提供的方法的方法调用中,而不是返回通常的响应,例如,而不是:
{"foo": "bar", "baz":"bah"}
它将返回:
temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});
jQuery定义临时回调函数并插入<script src="..."></script>
元素,该元素不受同一原始策略的限制。
加载脚本时,会执行该功能,就是这样。
缺点是,如果服务器是邪恶的(或被黑客攻击),它现在可以在浏览器中执行任意代码。
更多信息here。
答案 1 :(得分:3)
您可以使用插件JSONP在MooTools中使用JSONP。它由Aaron Newton制作,是MooTools核心开发人员之一。
答案 2 :(得分:1)
自v1.2.2(2009年4月23日发布)以来,它更多地包含在MooTools中。
查看this documentation page了解详情。
答案 3 :(得分:0)
根据其API文档和this forum,您似乎无法使用Mootools。
这是有限的原因可能是因为Cross-site scripting attacks。