从单页应用程序调用外部REST Web服务

时间:2014-03-23 00:20:37

标签: rest backbone.js single-page-application

我正在使用Backbone& amp;创建SPA下划线JS。该应用程序的基本功能是,在输入搜索词时,需要触发外部REST Web服务调用并获取JSON响应。但是当我尝试这个时,浏览器会取消请求,因为我猜它会尝试进行跨域AJAX调用。

我在本地托管此SPA,REST Web服务托管在外部服务器上。如果我需要进行跨域调用,那么在不对服务器端进行任何更改的情况下,我需要遵循的步骤是什么?我听说JSONP是替代方案之一,但对方法还不确定。

2 个答案:

答案 0 :(得分:0)

看起来它与此问题中的问题相同。这非常有用:

JSONP and Backbone.js

答案 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,它就可以了!