8 votes

Mettre un en-tête http personnalisé dans le backbone

Je suis en train de créer une API avec Tastypie et je veux accéder à l'API depuis Backbone. Pour envoyer des informations d'identification, j'utilise un user_id et une api_key. Je fais cela dans Android et avec curl et cela fonctionne très bien, mais je peux définir l'en-tête http à partir de Backbone.

Pour les boucles, j'utilise :

 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" 

et dans Android java j'utilise :

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

Les deux fonctionnent très bien, mais lorsque j'essaie dans Backbone en suivant les réponses que j'ai trouvées dans d'autres messages de la page, cela ne fonctionne pas.

Je suis en train d'essayer ceci :

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

Je mets l'en-tête lors de l'appel à la destruction, mais cela n'envoie pas d'information au serveur.

Qu'est-ce que je fais de travers ?

Merci à tous.

19voto

Tom Tu Points 6766

La réponse de Tallmaris devrait résoudre le problème, mais je recommanderais d'utiliser jQuery. ajaxSetup pour configurer les en-têtes comme valeurs par défaut pour toutes les requêtes ajax, car je pense que vous en avez besoin tout le temps de toute façon, n'est-ce pas ?

A l'endroit où vous lancez l'application, mettez

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

Grâce à cela, vous vous épargnerez beaucoup de code répété :) keep it DRY !

(il faut évidemment s'assurer que dataWeb est disponible dans le champ d'application où vous lancez l'application :) )

3voto

Tallmaris Points 4185

Il semble que vous passiez deux paramètres à la destruction, n'en passez qu'un seul contenant les en-têtes et les autres options ensemble, à moins que l'ordre des crochets ne soit une faute de frappe. Essayez ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X