我正在使用Tastypie创建API,我想从Backbone访问API。 要发送凭据,我使用user_id和api_key。我在android和curl中这样做,这工作很棒,但我可以设置来自主干的http标头。
在卷曲中我使用:
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"
在android java中我使用:
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);
它们都运行良好,但是当我在Backbone中尝试使用我在页面上的其他帖子中找到的响应时,这不起作用。
我正在尝试这个:
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);
}
}
);
当我调用destroy调用时,我正在放置标题,但是这不会向服务器发送anithing。
我在错误的模式下做什么?
感谢所有人。
答案 0 :(得分:19)
Tallmaris的答案应该为你解决,虽然我建议使用jQuery ajaxSetup方法将标题设置为所有ajax请求的默认值,因为我认为你总是需要它们吗?
您启动应用程序的地方
$.ajaxSetup({
headers: {
'user_id':dataWeb.get("id"),
'api_key':dataWeb.get("api_key")
}
});
多亏了你,你会为自己节省很多重复的代码:)保持干燥!
(显然你需要确保在启动应用程序的范围内提供dataWeb :))
答案 1 :(得分:3)
似乎你要传递两个参数来销毁,只传递一个包含标题和其他选项的参数,除非括号顺序是拼写错误。试试这个:
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);
}
});