Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有jsonp的backbone.js_Javascript_Json_Backbone.js_Jsonp - Fatal编程技术网

Javascript 带有jsonp的backbone.js

Javascript 带有jsonp的backbone.js,javascript,json,backbone.js,jsonp,Javascript,Json,Backbone.js,Jsonp,在花了几个小时寻找解决方案之后,我终于在这里发布了这个问题。让我知道我的愚蠢程度:) 代码如下: Model and collection: var app = app || {}; var metricsModel = Backbone.Model.extend({}); var MetricsList = Backbone.Collection.extend({ model:metricsModel, sync: function(method, collections, optio

在花了几个小时寻找解决方案之后,我终于在这里发布了这个问题。让我知道我的愚蠢程度:)

代码如下:

Model and collection:
var app = app || {};
var metricsModel = Backbone.Model.extend({});
var MetricsList = Backbone.Collection.extend({
  model:metricsModel,
  sync: function(method, collections, options) {
    options.dataType = "jsonp";
    return Backbone.sync(method, collections, options);
  },
  url:<url>
});

View:
app.CommitmentView = Backbone.View.extend({
  initialize:function(){
    app.metrics = new MetricsList();
    app.metrics.bind("change", this.render, this);
    app.metrics.fetch({
      success: function(collection,response) {
        console.log("fetch successful" + response);
      },
      error: function(collection,response) {
        console.log("error" + JSON.stringify(response));
      }
    });
    app.metrics.on('all',this.render,this);
  }
});
模型和集合:
var-app=app |{};
var metricsModel=Backbone.Model.extend({});
var MetricsList=Backbone.Collection.extend({
模型:metricsModel,
同步:函数(方法、集合、选项){
options.dataType=“jsonp”;
返回Backbone.sync(方法、集合、选项);
},
网址:
});
视图:
app.CommitmentView=Backbone.View.extend({
初始化:函数(){
app.metrics=new MetricsList();
app.metrics.bind(“change”,this.render,this);
app.metrics.fetch({
成功:功能(收集、响应){
console.log(“获取成功”+响应);
},
错误:函数(收集、响应){
log(“error”+JSON.stringify(response));
}
});
app.metrics.on('all',this.render,this));
}
});
结果:错误{“readyState”:4,“status”:200,“statusText”:“success”}

始终调用错误回调。我对后端没有太多的控制权。只需确保完成以下检查:

服务器用正确的JSON响应—JSON对象数组。在FF和铬上测试。 JSON键是字符串


我如何进一步调试它?请告诉我

所以后端恰好返回了一个json对象。后端使用的REST框架非常灵活,我所要做的就是在URL中用jsonp替换json

旧网址:http:///format/json 新网址:http:///format/jsonp

这是REST框架


感谢@dbaseman的建议/评论

您能检查发送的HTTP请求和错误代码吗?对于Chrome或Sagari,您可以通过Web Inspector()看到这一点。@LaurentPerrin问题中没有提到它吗<代码>“readyState”:4,“status”:200,“statusText”:“success”传递给回调的值表明查询正常,但这不是实际的HTTP请求。是您的服务器,还是外部服务器?记住,它需要实际支持JSONP才能工作——它不应该只返回原始JSON,它必须返回包装在Javascript函数中的JSON。@dbaseman服务器是外部的,但我认识这些人,所以他们可以调整它。服务器确实返回原始JSON。我会让这些人在javascript函数中返回JSON。如果有用的话,我会在这里发布。谢谢