我有一个简单的主干应用程序,它以 struts Controller 作为后端,并且工作正常。然后我尝试包含跨域请求处理逻辑,我发现有两种方法可以进行跨域请求
- JSONP
- CORS
现在我想做的是,如果浏览器不支持 CORS..那么我将不得不发出 JSONP 请求。我已经完成了 CORS(只是使用过滤器添加了 header ),这部分正在工作,但我无法成功发出 JSONP 请求。
我对此的疑问是:
服务器(struts Controller )的响应应该是什么?它会返回类似函数调用的东西吗?截至目前,它正在返回模型。
在 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/