Ajax和REST:我可以向REST服务发送ajax请求以接收响应吗?

时间:2010-03-23 11:39:10

标签: ajax rest xss

我想使用mootools和SqueezBox类来处理对RESTful服务的请求。我不想使用任何服务器端脚本。我正在使用AJAX。我使用GET方法向以下url发送请求。 http://www.idevcenter.com/api/v1/links/links-upcoming.json 但我收到404错误。是因为跨站点脚本吗?这是我的代码:

SqueezeBox.initialize({handler:'url',ajaxOptions:{method:'GET'}});
$('a.modal').addEvent('click',function(e){
    new Event(e).stop();
    SqueezeBox.fromElement($('a.modal'));
});

在Firebug控制台中,有时会显示“已中止”,有时会显示“404”。这有什么问题?

2 个答案:

答案 0 :(得分:2)

XMLHttpRequest受Same Origin Policy的约束;如果您在其中运行JavaScript的文档与您尝试呼叫的服务的来源不同,则出于安全原因,将禁止该呼叫。

现在有一个cross-origin resource sharing的建议标准来解决这个问题。可能是您尝试使用的服务支持它;如果是这样,使用实现CORS的浏览器(Firefox和Chrome的最新版本,以及其他一些版本)可能会有效。 IE8 supports it但要求你做额外的工作。

答案 1 :(得分:0)

您不能使用XMLHttpRequest(即普通的“ajax”)来调用不在您域中的服务器上的服务。

然而,您可以使用JSONP技巧,该技巧利用浏览器从其他域加载Javascript这一事实。但是,服务必须知道您将要这样做,并且必须了解协议。那个特殊的服务似乎非常愿意给我一个JSON响应,但是当我给它一个“回调”参数时它没有注意。 (我已经尝试了“回调”和“jsonp”,并且返回的JSON blob是相同的,没有函数调用包装器。)