javascript - 带有 JSONP 的主干 js

标签 javascript rest backbone.js cross-domain jsonp

我有一个简单的主干应用程序,它以 struts Controller 作为后端,并且工作正常。然后我尝试包含跨域请求处理逻辑,我发现有两种方法可以进行跨域请求

  1. JSONP
  2. CORS

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

我对此的疑问是:

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

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

注意:我的 JSONP 调用出现以下错误:

Error: jsonpCallback was not called

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

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);
    },

谢谢。

最佳答案

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

关于javascript - 带有 JSONP 的主干 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090075/

相关文章:

javascript - 检测字符串是否与格式说明符字符串匹配

javascript - AngularJS 中文本区域占位符内的不间断空格

javascript - 在 AngularJS 中使用 $resources 时如何保留本地 UI 状态

jQuery 移动 + 主干 : cannot call methods on listview prior to initialization

javascript - 自定义函数无法在背景网格 :exitEditMode 上触发

javascript - 使用 Backbone.js/Marionette 编辑列表

javascript - 带有烂番茄 api 的 jQuery 自动完成功能

javascript - forloop的最后一次迭代修改vue中的最终输出

javascript - express .js : calling internal services

java - Jersey (REST) RESPONSE 多部分/混合多个 body 部分