Javascript 带JSONP的主干js

Javascript 带JSONP的主干js,javascript,rest,backbone.js,cross-domain,jsonp,Javascript,Rest,Backbone.js,Cross Domain,Jsonp,我有一个简单的主干应用程序,它的后端是struts控制器,运行良好。然后我尝试加入跨域请求处理逻辑,我知道有两种方法可以进行跨域请求 JSONP 科尔斯 现在我要做的是,如果浏览器不支持CORS。。那么我必须提出JSONP请求。我已经完成了CORS(只是使用过滤器添加了头),这部分工作正常,但我无法成功地发出JSONP请求 我的问题是: 服务器(struts控制器)的响应应该是什么?它是否返回类似于函数调用的内容?到目前为止,它正在返回模型 在主干js中,只覆盖Backbone.sync以使其数

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

  • JSONP
  • 科尔斯
  • 现在我要做的是,如果浏览器不支持CORS。。那么我必须提出JSONP请求。我已经完成了CORS(只是使用过滤器添加了头),这部分工作正常,但我无法成功地发出JSONP请求

    我的问题是:

  • 服务器(struts控制器)的响应应该是什么?它是否返回类似于函数调用的内容?到目前为止,它正在返回模型

  • 在主干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);
        },
    

    谢谢。

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

    url请求可能如下所示:

    options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?";
    
    http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100
    
    jQuery17205394351207651198_1336231056100({
        "name": "Henry T Ford",
        "company": "Ford Motor Company",
        "modified": "2012-04-05T15:06:36Z"});
    
    查询字符串的
    回调
    部分将自动替换为Struts代码需要使用的随机函数名

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

    options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?";
    
    http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100
    
    jQuery17205394351207651198_1336231056100({
        "name": "Henry T Ford",
        "company": "Ford Motor Company",
        "modified": "2012-04-05T15:06:36Z"});
    
    因此,Struts代码将读取回调参数并发出如下JavaScript:

    options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?";
    
    http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100
    
    jQuery17205394351207651198_1336231056100({
        "name": "Henry T Ford",
        "company": "Ford Motor Company",
        "modified": "2012-04-05T15:06:36Z"});
    
    jQuery处理使用该随机名称创建临时函数以接收响应并将其传递给定义的成功方法