2012-12-07 13 views
5

Na moim serwerze REST wymaga, aby access_token był obecny w każdym żądaniu. tj. w danych POSTing, access_token należy składać razem z atrybutami.Dodaj access_token w backbone.js

Jak skonfigurować plik backbone.js, aby dodać access_token do wszystkich żądań GET, PUT, POST i DELETE?

Dzięki.

Odpowiedz

1

Sieć szkieletowa używa jQuery/Zepto dla żądań AJAX, dzięki czemu można korzystać z funkcji dostępnych w tych bibliotekach.

Aby dodać niestandardowe nagłówki do wszystkich wywołań XHR wykonanych przez jQuery, można użyć jQuery.ajaxSend event, który jest wyzwalany przed każdym żądaniem ajaxowym i modyfikować jqXHR, który otrzymuje jako argument.

Edycja oparty na komentarze OP:

Prawdopodobnie najprostszym sposobem, aby zmodyfikować dane wysyłane jest nadpisanie funkcji Backbone.sync. Można owinąć natywnej implementacji i dodać wymaganą właściwość tam:

var nativeSync = Backbone.sync; 
Backbone.sync = function (method, model, options) { 
    //for POST/PUT requests, add access token to the request 
    if(model && (method === 'create' || method === 'update')) { 

    var data = _.extend(model.toJSON(), { 
     access_token: 'token' 
    }); 

    options.data = JSON.stringify(data); 
    } 
    //call the native Backbone.sync implementation 
    nativeSync(method, model, options); 
}; 
+0

Witaj fencliff. Co się stanie, jeśli chcę, aby access_token znajdował się w samym ładunku danych, a nie w nagłówkach, w jaki sposób mogę to osiągnąć? Czy I $ .ajaxSend (funkcja (e, jqxhr, ustawienia) {settings.data.access_token = 'mytoken'}) to? – Mikko

+0

Można to również zrobić - ale czy na pewno chcesz, aby access_token został dodany do żądań GET i DELETE? Nie jest typowym zapewnienie ciała żądania przy użyciu tych czasowników, a większość serwerów WWW i tak ignoruje ciało. – jevakallio

+0

Właściwie używam serwera REST https://github.com/philsturgeon/codeigniter-restserver i podczas sprawdzania kodu źródłowego polegają one na treści żądania. – Mikko

4

Okay, myślę, że znaleźli sposób, jak to zrobić w jQuery.

$.ajaxSetup (
    { 
     data: { access_token: 'my_access_token' } 
    } 
);