使用JSONP的Backbone js

时间:2012-04-10 13:49:13

标签: javascript rest backbone.js cross-domain jsonp

我有一个简单的主干应用程序,它有struts控制器作为它的后端,它工作正常。然后我尝试包含跨域请求处理逻辑,我开始知道有两种方法可以进行跨域请求

  1. JS​​ONP
  2. CORS
  3. 现在我要做的是,如果浏览器不支持CORS ..那么我将不得不发出JSONP请求。我已经完成了CORS(刚刚使用过滤器添加了标题),这部分正在运行,但我无法成功发出JSONP请求。

    我对此的疑问是:

    1. 服务器(struts控制器)的响应应该是什么?它是否返回函数调用之类的东西?截至目前,它已退回模型。

    2. 在Backbone js中,只覆盖Backbone.sync使其数据类型为JSONP就够了吗?

    3. 注意:我的JSONP调用收到以下错误:

        

      错误:未调用jsonpCallback

      代码:我在集合中覆盖了我的同步。我的同步功能是

      sync: function(method, model, options) {             
              options.dataType = 'jsonp';
              options.url="http://localhost:8084/CrossDomain_backbone/messages.json";           
              //options.contentType='application/json-p';
              options.error=this.errorr;
              return Backbone.sync(method, model, options);
          }
         ,
          parse: function(resp){
              alert('inside parse..');
              return resp.model;
          },
          errorr:function(response,responseText)
          {
              alert('inside callback..: ' + responseText);
          },
      

      感谢。

1 个答案:

答案 0 :(得分:2)

你的Struts代码需要返回一个包含数据的函数调用。

网址请求可能如下所示:

options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?";

查询字符串的callback部分将自动替换为Struts代码需要使用的随机函数名称。

例如,当发出JSONP请求时,jQuery(Backbone使用)可能如下所示:

http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100

因此,您的Struts代码将读取回调参数并发出类似这样的JavaScript:

jQuery17205394351207651198_1336231056100({
    "name": "Henry T Ford",
    "company": "Ford Motor Company",
    "modified": "2012-04-05T15:06:36Z"});

jQuery处理用该随机名称创建临时函数以接收响应并将其传递给定义的成功方法。