我正在使用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();
喝彩!
答案 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协议实现了这一点。