骨干提取:使用自定义标头数据执行骨干提取时未设置标头

时间:2014-01-09 04:38:42

标签: javascript backbone.js

我正在开发一个骨干应用程序,它涉及从外部API获取数据。 我的应用程序的域名是product.site1.com,而API的域名是api.site1.com。

这就是我的模型和集合的外观

var pModel = new Backbone.Model.extend({});
var pCollection = new Backbone.Collection.extend({
                      model: pModel,
                      url: 'api.site1.com/product'
});

和视图如下所示

var pView = new Backbone.View.extend({
         initialize: function() {
                var _this = this;
                var pCollectionVar = new pCollection();
                pCollectionVar.fetch({
                           dataType: 'jsonp',
                           beforeSend: _this.sendAuthentication,
                           success: function(collection, response, options) {
                                   console.log(collection);
                           },
                           error: function(collection, xhr, options) {
                                   console.log("error");
                           }
                     });
                } 
         sendAuthentication: function(xhr) {
            xhr.setRequestHeader('customKey1', 'ABCD');
            xhr.setRequestHeader('customKey2', '1234');
        }
});

当我执行此操作时,我的应用程序向API服务器发出get请求,而我没有在服务器端获取头数据。我没有在chrome dev工具中看到为请求设置的这些自定义标头。

修改 选项http://api.site1.com/product 405(方法不允许)jquery-1.10.2.js:8706

选项http://api.site1.com/product无效的HTTP状态码405 jquery-1.10.2.js:8706

XMLHttpRequest无法加载http://api.site1.com/product。无效的HTTP状态代码405(索引):1

这些是我在执行请求时遇到的错误。

1 个答案:

答案 0 :(得分:0)

如果你想像使用sendAuthentication一样使用它应该是一个全局函数:

pCollectionVar.fetch({
  dataType: 'jsonp',
  beforeSend: sendAuthentication,
  success: function(collection, response, options) {
    console.log(collection);
  },
  error: function(collection, xhr, options) {
    console.log("error");
  }
});

function sendAuthentication(xhr){
   //Code goes here
}

虽然这会污染全局范围,但我会使用命名空间:

var MyApplication = {};
MyApplication.sendAuthentication = function(xhr){ //code inside}.


pCollectionVar.fetch({
  dataType: 'jsonp',
  beforeSend: MyApplciation.sendAuthentication,
  success: function(collection, resp){//rest...}

编辑

here所述,jsonp不是ajax调用,不能这样对待