personalizados - Coloque un encabezado http personalizado en la red troncal
http headers post (2)
Estoy creando una API con Tastypie y quiero acceder a la API desde Backbone. Para enviar credenciales, uso un user_id y una api_key. Hago esto en Android y con curl y esto funciona muy bien, pero puedo configurar el encabezado http desde la red troncal.
En curl uso:
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"
y en Android java utilizo:
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);
Ambos funcionan muy bien, pero cuando pruebo esto en Backbone siguiendo las respuestas que encontré en otra publicación de la página, esto no funcionó.
Estoy intentando esto:
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);
}
}
);
Voy a poner el encabezado cuando llamo a la llamada de destrucción, pero esto no envía el anithing al servidor.
¿Qué estoy haciendo en un modo incorrecto?
Gracias a todos.
La respuesta de Tallmaris debería solucionarlo, aunque recomendaría usar el método jQuery ajaxSetup para configurar los encabezados como valores por defecto para todas las solicitudes de Ajax, ya que creo que las necesita todo el tiempo, ¿verdad?
En algún lugar donde inicie la aplicación, coloque
$.ajaxSetup({
headers: {
''user_id'':dataWeb.get("id"),
''api_key'':dataWeb.get("api_key")
}
});
Gracias a eso, se ahorrará un montón de código repetido :) ¡manténgalo SECO!
(obviamente, necesitarás asegurarte de que dataWeb esté disponible en el ámbito de donde inicias la aplicación :))
Parece que estás pasando dos parámetros para destruir, pasar solo uno que contenga los encabezados y las otras opciones juntas, a menos que el orden de los paréntesis sea un error tipográfico. Prueba esto:
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);
}
});