【问题标题】:Backbone js with JSONP带有 JSONP 的主干 js
【发布时间】:2012-04-22 19:43:10
【问题描述】:

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

  1. JSONP
  2. CORS

现在我要做的是,如果浏览器不支持 CORS..那么我将不得不发出 JSONP 请求。我完成了 CORS(只是使用过滤器添加了标头),这部分工作正常,但我无法成功发出 JSONP 请求。

我的问题是:

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

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

注意:我的 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);
    },

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    url 请求可能如下所示:

    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 使用该随机名称创建一个临时函数以接收响应并将其传递给定义的成功方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2014-06-23
      • 2015-11-04
      相关资源
      最近更新 更多