8

我正在使用 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);
                     }
                }
    );

当我调用销毁调用时,我正在放置标题,但这不会将任何内容发送到服务器。

我在错误的模式下做什么?

谢谢大家。

4

2 回答 2

19

Tallmaris 的答案应该为您解决它,但我建议使用 jQuery ajaxSetup方法将标头设置为所有 ajax 请求的默认值,因为我相信您一直都需要它们,对吧?

您启动应用程序的地方

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

多亏了这一点,您将为自己节省大量重复的代码 :) 保持干燥!

(显然,您需要确保 dataWeb 在您启动应用程序的范围内可用:))

于 2012-10-25T18:37:03.413 回答
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);
    }
});
于 2012-10-25T18:11:50.953 回答