【问题标题】:Put a custom http header in backbone在主干中放置一个自定义 http 标头
【发布时间】:2012-10-15 23:26:28
【问题描述】:

我正在使用 Tastypie 创建一个 API,我想从 Backbone 访问该 API。 要发送凭据,我使用 user_id 和 api_key。我在 android 和 curl 中执行此操作,效果很好,但我可以从主干设置 http 标头。

在 curl 我使用:

 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 调用时将标头放入,但这不会将任何内容发送到服务器。

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

谢谢大家。

【问题讨论】:

    标签: http backbone.js tastypie


    【解决方案1】:

    您似乎传递了两个参数来销毁,只传递一个包含标题和其他选项的参数,除非括号顺序是拼写错误。试试这个:

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

    【讨论】:

    • 使用 Ajax 参数对我来说很好。我试试这个,但这不是问题。感谢您的回答。
    【解决方案2】:

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

    你启动应用程序的地方

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

    感谢您为自己节省了大量重复的代码 :) 保持干燥!

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

    【讨论】:

    • 谢谢!!!是工作!我终于可以删除笔记了! ajax 参数正确放置了标题。将标题放在主干方法中对我不起作用。
    • 似乎无法让我的标头受到尊重或发送到服务器。我应该在哪里设置?
    • 这使用 jQuery ajaxSetup 来全局更改使用 jquery 发出的所有请求(Backbone 在内部使用它们)放置它的最佳位置是您设置和运行应用程序的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多