2012-10-25 10 views
8

Ich erstelle eine API mit Tastypie und ich möchte auf die API von Backbone zugreifen. Um Anmeldeinformationen zu senden, verwende ich eine user_id und einen api_key. Ich mache das in android und mit curl und das funktioniert super, aber ich kann den HTTP-Header vom Backbone aus einstellen.Setzen Sie eine benutzerdefinierte HTTP-Header in Backbone

In curl ich benutze:

curl --dump-header - -H "Accept: application/json" -H "Content-Type: application/json" -H "user_id: 32" -H "api_key: 69950" -X DELETE "http://127.0.0.1:8000/api/v1/deletenote/66/?format=json" 

und in android java Ich benutze:

HttpDelete requestDELETE = new HttpDelete(); 
    requestDELETE.setHeader("Content-type", "application/json"); 
    requestDELETE.setHeader("Accept", "application/json"); 
    requestDELETE.setHeader(Constants.HEADER_USER_ID, user_id); 
    requestDELETE.addHeader(Constants.HEADER_API_KEY, key); 

sie beide große Arbeit, aber wenn ich versuche, dies in Backbone nach den Antworten, die ich gefunden in anderer Beitrag von der Seite, dies hat nicht funktioniert.

ich dies versuchen:

var removeNote = new DeleteNoteModel({id:this.model.toJSON().id},{ query:this.model.toJSON().id}); 


removeNote.destroy({ 
     headers: {'user_id':dataWeb.get("id"),'api_key':dataWeb.get("api_key")} 
     },{ 
        async:false, 
        error: function(model, response){ 
         console.log("KO_REMOVE_NOTE"); 
         console.log(response); 
        }, 
        success : function(model, response){ 
         console.log("OK_REMOVE_NOTE"); 
         console.log(response); 
        } 
       } 
    ); 

ich den Header bin setzen, wenn ich auf den Ruf zerstören nennen, aber dieser anithing an den Server nicht senden.

Was mache ich im falschen Modus?

Danke an alle.

Antwort

19

Tallmaris Antwort sollte es für Sie zu beheben, obwohl ich empfehlen würde jQuery ajaxSetup Methode zum Einrichten usign die Header als Standardwerte für alle AJAX-Anfragen, wie ich glaube, dass Sie sie die ganze Zeit sowieso richtig brauchen?

Irgendwo, wo Sie die App starten, setzen in

$.ajaxSetup({ 
    headers: { 
     'user_id':dataWeb.get("id"), 
     'api_key':dataWeb.get("api_key") 
    } 
}); 

Dank, dass Sie sich eine Menge von wiederholten Code speichern werde :) halten Sie es trocken!

(natürlich müssen Sie, um sicherzustellen, dass dataWeb im Rahmen der zur Verfügung steht, wo Sie die App starten :))

+0

Danke !!! Es ist Arbeit! Ich kann endlich eine Notiz entfernen! Die Ajax-Parameter setzen den Header korrekt. Das Setzen des Headers in die Backbone-Methode funktioniert bei mir nicht. –

+0

großartig, dass Juanma zu hören! –

+0

Sehr hilfreich, danke. –

3

Es scheint so, als würden Sie zwei Parameter zum Zerstören übergeben und nur einen übergeben, der die Header und die anderen Optionen enthält, es sei denn, die Reihenfolge der Klammern ist ein Tippfehler. Versuchen Sie folgendes:

removeNote.destroy({ 
    headers: { 
     'user_id':dataWeb.get("id"), 
     'api_key':dataWeb.get("api_key") 
    }, // there was an extra close-open curly here... 
    async:false, 
    error: function(model, response){ 
     console.log("KO_REMOVE_NOTE"); 
     console.log(response); 
    }, 
    success : function(model, response){ 
     console.log("OK_REMOVE_NOTE"); 
     console.log(response); 
    } 
}); 
+0

Verwendung ein Ajax-Parameter für mich gut funktionieren. Ich versuche das, aber das ist nicht das Problem. Danke für die Antwort. –