2014-01-09 1 views
1

Я разрабатываю базовое приложение, которое включает выборку данных из внешнего API. Домен моего приложения - product.site1.com, тогда как домен API - api.site1.com.Backbone fetch: Заголовки не задаются при выполнении выборки с базовыми данными

Это как моя модель и коллекция выглядит

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'); 
     } 
}); 

Когда я выполняю это, мое приложение делает запрос GET к серверу API, в то время как I я не получаю данные заголовка на сервере. Я не вижу, чтобы эти пользовательские заголовки устанавливались для запроса в моих инструментах chrome dev.

EDIT: ВАРИАНТЫ http://api.site1.com/product 405 (Method Not Allowed) JQuery-1.10.2.js: 8706

OPTIONS http://api.site1.com/product Invalid HTTP код статуса 405 JQuery-1.10.2.js: 8706

XMLHttpRequest не может загрузить http://api.site1.com/product. Недопустимый код состояния HTTP 405 (индекс): 1

Это ошибки, которые я получаю во время выполнения запроса.

ответ

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...} 

EDIT:

как описано here, jsonp не является вызовом ajax и не может рассматриваться как таковой

+0

Хорошо, я понимаю проблему определения области здесь. Даже после регулировки объема заголовки не установлены. Будет ли проблема использовать jsonp вместе с пользовательскими заголовками? –

+0

@sree jsonp не является вызовом ajax, см. Редактировать в ответе – ekeren

+0

Спасибо за разъяснение. Я включил ошибку в вопрос. –

Смежные вопросы