2010-03-23 103 views
0

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

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

在萤火虫控制台,有时'中止'显示,有时'404'。这是什么错?

回答

2

XMLHttpRequest受Same Origin Policy;如果您的JavaScript运行的文档与您尝试拨打的服务来源不同,则出于安全原因,该电话将被禁止。

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

+0

我在我的请求中看到了一些标题,它似乎是跨源标题。我得到的回应,但与404错误。所以我认为是打电话。 访问控制请求方法:获取 访问控制请求头:x请求与 – 2010-03-23 12:16:05

+0

是的,这些都是CORS请求头(应该有一个“Origin”)。如果你得到了一个404(我错过了你原来的问题!),那*应该*表示该资源根本不在该URL上,而不是你无法访问它(这就是401, 403等等 - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。所以我会再次检查网址。 – 2010-03-23 12:22:04

+0

更新:我只是试了一下,我得到了同样的结果:直接的浏览器请求给了我JSON,但我无法通过XHR加载它。原因是idevcenter正在使用404来响应OPTIONS请求,这意味着它们不支持CORS(或者至少没有预先计划的CORS)。我本来会想到404以外的东西,但是,嘿,CORS是新的。可能值得问他们是否会考虑。 – 2010-03-23 12:29:18

0

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

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

+0

感谢您的关注。如果无法发送请求,为什么我得到404错误的响应?我认为如果没有通话,我不应该从服务器得到回应。 – 2010-03-23 12:19:19