我正在使用Backbone& amp;创建SPA下划线JS。该应用程序的基本功能是,在输入搜索词时,需要触发外部REST Web服务调用并获取JSON响应。但是当我尝试这个时,浏览器会取消请求,因为我猜它会尝试进行跨域AJAX调用。
我在本地托管此SPA,REST Web服务托管在外部服务器上。如果我需要进行跨域调用,那么在不对服务器端进行任何更改的情况下,我需要遵循的步骤是什么?我听说JSONP是替代方案之一,但对方法还不确定。
答案 0 :(得分:0)
看起来它与此问题中的问题相同。这非常有用:
答案 1 :(得分:0)
如果您的外部服务已经支持它,那么您是正确的,JSONP将成为跨域请求的方式,而无需在服务器端更改任何内容。我假设您正在使用jQuery。以下是jQuery的文档中的一个示例:
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: "mount rainier",
tagmode: "any",
format: "json"
})
.done(function( data ) {
console.log(data);
});
您会注意到flickr网址中的?jsoncallback=?
。这告诉flickr将响应包装在JSONP回调中,而不是仅返回正常的JSON。当flickr看到它时,它们会像这样包装响应:
jQuery19104044632513541728_1395560629443({
"title": "Recent Uploads tagged mountrainier",
...other json data...
});
因此,它们不是在重新调整JSON,而是将它包装在jQuery放在全局窗口对象上的函数调用中。该函数调用将使用json数据调用您的success函数。
幸运的是,你不必了解它的内部运作。你所要做的就是调用$ .getJSON,它就可以了!