jQuery如何进行跨域ajax调用,以及如何使用mootools复制em

时间:2009-04-07 17:09:51

标签: jquery mootools cross-domain

在我永恒的内部斗争中,关于是否继续使用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

4 个答案:

答案 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