2012-10-25 32 views
8

Tôi đang tạo API với Tastypie và tôi muốn truy cập API từ Backbone. Để gửi thông tin đăng nhập, tôi sử dụng user_id và api_key. Tôi làm điều này trong android và với curl và công việc này tuyệt vời, nhưng tôi có thể thiết lập tiêu đề http từ xương sống.Đặt tiêu đề http tùy chỉnh vào xương sống

Trong curl tôi sử dụng:

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" 

và trong java android tôi sử dụng:

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

Cả hai đều làm việc tuyệt vời, nhưng khi tôi cố gắng này trong Backbone sau những câu trả lời mà tôi tìm thấy trong bài đăng khác từ trang, điều này không hoạt động.

tôi đang cố gắng này:

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

tôi đặt tiêu đề khi tôi gọi đến phá hủy cuộc gọi, nhưng điều này không gửi anithing đến máy chủ.

Tôi đang làm gì ở chế độ sai?

Cảm ơn tất cả.

Trả lời

19

Tallmaris câu trả lời nên sửa chữa nó cho bạn mặc dù tôi muốn giới thiệu usign jQuery ajaxSetup phương pháp để thiết lập các tiêu đề như các giá trị mặc định cho tất cả các yêu cầu ajax như tôi tin rằng bạn cần họ mọi lúc nào phải không?

Một nơi nào đó, nơi bạn khởi động ứng dụng đưa vào

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

Nhờ đó bạn sẽ tiết kiệm cho mình rất nhiều mã lặp đi lặp lại :) giữ cho nó khô!

(rõ ràng là bạn cần đảm bảo rằng dữ liệuWeb có sẵn trong phạm vi nơi bạn khởi chạy ứng dụng :))

+0

Cảm ơn !!! Đó là công việc! Cuối cùng tôi có thể xóa một ghi chú! Các tham số ajax đặt tiêu đề chính xác. Đặt tiêu đề trong phương thức xương sống không hoạt động đối với tôi. –

+0

tuyệt vời khi biết rằng Juanma! –

+0

Rất hữu ích, cảm ơn. –

3

Có vẻ như bạn đang chuyển hai tham số để hủy, chỉ chuyển một tham số chứa tiêu đề và các tùy chọn khác cùng nhau, trừ khi thứ tự ngoặc là lỗi đánh máy. Hãy thử điều này:

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

Sử dụng tham số Ajax hoạt động tốt cho tôi. Tôi thử điều này nhưng đây không phải là vấn đề. Cảm ơn câu trả lời. –

Các vấn đề liên quan