4

在我关于是否继续使用 mootools 或跳转到 jQuery 的永恒内部斗争中,我在 jQuery 文档上发现了一些引起我注意的东西,那就是 jQuery 可以向不同的域请求 JSON,这通常被浏览器禁止.

我已经看到了一些跨子域的解决方法,但从来没有跨域,我真的很激动,首先我认为我是服务器相关的,但尝试了更多我已经看到从 jQuery 执行相同的 JSON 请求Mootools 上的文档不起作用!

这适用于 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 文档:http : //docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols 文档:http ://mootools.net/docs/Request/Request.JSON

4

4 回答 4

11

页面上说它是JSONP。

JSONP 是一种技巧,服务器不返回通常的响应,而是将其包装到用户提供的方法的方法调用中,例如,而不是:

{"foo": "bar", "baz":"bah"}

它会返回:

temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});

jQuery定义了临时回调函数,插入<script src="..."></script>元素,不受同源策略限制。

加载脚本后,将执行该函数,仅此而已。

不利的一面是,如果服务器是邪恶的(或被黑客入侵),它现在可以在您的浏览器中执行任意代码。

更多信息在这里

于 2009-04-07T17:34:17.980 回答
3

您可以通过插件 JSONP 在 MooTools 中使用JSONP。它由MooTools 的核心开发人员之一Aaron Newton制作。

于 2009-04-07T17:40:44.673 回答
1

自 v1.2.2(2009 年 4 月 23 日发布)以来,MooTools 中包含更多内容。

查看此文档页面以获取更多信息。

于 2009-05-02T15:39:59.907 回答
0

根据它的 API 文档和这个论坛,你似乎不能用 Mootools 做到这一点。

这受到限制的原因可能是因为跨站点脚本攻击

于 2009-04-07T17:13:54.223 回答