如何修改Request.JSON以满足跨域安全性

时间:2011-09-22 04:39:12

标签: ajax json mootools

我正在使用mootools从我的Web处理程序请求json,这在同一台机器上工作正常。我已经阅读了有关回调需要满足跨域问题的地方,但不确定如何应用它。我想从另一个域运行此代码。

var input = [];

var jsonRequest = new Request.JSON({
    url: "http://www.mysite.com.au/GetImages.ashx?p=2",
    onSuccess: function (result) {

        for (var i = 0; i < result.length; i++) {
            // alert(result[i].MediaPath);
            var s = result[i].MediaPath.split('|');
            for (var j = 0; j < s.length; j++) {
                //        alert(s[j]);
                input.push(s[j]);
            }
        }


    }
}).get();

喝彩!

2 个答案:

答案 0 :(得分:1)

一种解决方案是使用JSONP

以下是您将使用的客户端代码:

<script>
    function onSuccess(result) {

        for (var i = 0; i < result.length; i++) {
            // alert(result[i].MediaPath);
            var s = result[i].MediaPath.split('|');
            for (var j = 0; j < s.length; j++) {
                //        alert(s[j]);
                input.push(s[j]);
            }
        }
    }
</script>
<script src="http://www.mysite.com.au/GetImages.ashx?p=2&callback=onSuccess" ></script>
<!-- !!! Notice that the src now has a "callback" paramater which the client is passing to the server. -->

以下是服务器将回复的内容:

onSuccess(
    {
      'your':'json',
      'data':'here'
    }
)

使这项工作的技巧是服务器在技术上不再返回json数据。相反,它将返回由javascript函数(客户端代码将定义)包装的json数据,该函数将由浏览器自动执行,因为这是浏览器对标记执行的操作。

如果你需要动态收集它,那么你可以让javascript代码创建一个脚本元素,将url添加为'src'属性,然后将脚本标记附加到body以让浏览器执行它。这种黑客是动态下载脚本的一种非常标准的方法。 MooTools 可能已经有办法做到这一点。

在我的建议下面:它不再是异步的。

答案 1 :(得分:0)

另一个可能的解决方案是让您的服务器代理来自其他站点的json请求。我不熟悉如何做到这一点,但我认为 SOAP协议实现了这一点。