2

我有一个简单的主干应用程序,它以 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);
    },

谢谢。

4

1 回答 1

2

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

于 2012-05-05T15:25:42.070 回答