2011-09-22 68 views
1

我正在使用mootools从我的web处理程序请求json,并且在同一台机器上工作正常。我已经阅读过关于需要回调以满足跨域问题的地方,但不确定如何应用此问题。我想从另一个域运行此代码。如何修改Request.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(); 

干杯!

回答

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 可能已经有办法做到这一点。

我的建议:不再是异步的。

+0

非常感谢! – MikeW

0

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