2011-12-30 49 views
6

Tôi có cuộc gọi ajax sau để cập nhật một lĩnh vực cụ thể của một mô hìnhAjax cuộc gọi thất bại trong Django

$("#updateLink").click(function(){ 
    var dec_text = $('#desc_text').val(); 

    $.ajax({ 
     type: "POST", 
     url:"https://stackoverflow.com/users/update_desc/", 
     data: { 
     'val': dec_text, 
     }, 
     success: function(){ 
      $(".display, .edit").toggle(); 
      $("#descText").html(dec_text); 
     }, 
     error: function(){ 
      alert("Error"); 
     }, 
    }); 
    return false; 
}); 

và quan điểm của tôi là thế này

@csrf_exempt 
def update_desc(request): 
    if request.is_ajax(): 
     if request.method == 'POST': 
      desc_text = request.POST.get('val', False) 
      if desc_text: 
       profile = user.profile 
       profile.desc = desc_text 
       profile.save() 

      return_message = "Sent mail" 
      return HttpResponse(return_message,mimetype='application/javascript') 

Tôi liên tục nhận được một thông báo lỗi và tôi không biết cách giải quyết vấn đề này. Tôi thậm chí còn sử dụng trình trang trí csrf_exempt để giải quyết sự cố nếu sự cố là do thiếu csrf token nhưng vẫn còn sự cố.

Ngoại trừ một ajax post trong mẫu base mẫu của tôi, tất cả các cuộc gọi ajax đều không thành công. Ai có thể xin giúp đỡ để hiểu những gì đang xảy ra ở đây. Tôi có thể cung cấp thêm một số chi tiết nếu cần.

Edit:

Tôi đã thêm một tập tin js chứa https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax này trong mẫu cơ sở của tôi, vì vậy nó có nghĩa là nó có mặt trong tất cả các mẫu của tôi. Và tôi đang sử dụng phiên bản django 1.3.

+0

Tôi hy vọng bạn vẫn gặp lỗi csrf_token. Nếu vậy câu trả lời của tôi được đăng bên dưới, hãy ghi lại lỗi sau khi bạn sử dụng csrf_exempt. –

+0

Thực ra tôi không biết làm thế nào để có được lỗi, như bạn có thể thấy tôi vừa đặt một cảnh báo trong cuộc gọi lại 'error' cho tôi biết rằng cuộc gọi ajax của tôi không thành công nhưng nó không cho tôi biết lỗi là gì. Làm thế nào tôi có thể nhận được lỗi? – Sachin

+0

Thứ nhất, trong tệp settings.py của bạn DEBUG = True. Điều này sẽ không hiển thị lỗi ajax của bạn nhưng chắc chắn những người khác không được phục vụ. –

Trả lời

6

Thứ nhất, bạn đang sử dụng POST và không gửi mã thông báo csrf. Hãy thử gửi mã thông báo csrf một cách rõ ràng hơn là sử dụng trang trí csrf_exempt.
Một cách để làm điều này là với những gì tôi đã thực hiện trong dữ liệu. Đó là lấy mã thông báo csrf (hoặc từ phương thức của riêng bạn) và truyền nó vào các đối số của bạn.

$.ajax({ 
     url : url, 
     type: "POST", 
     data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value}, 
     dataType : "json", 
     success: function(data){ 
      // do something 
     } 
    }); 
+0

Bây giờ không có gì xảy ra, tôi chỉ thấy một số ở cuối url nó có nghĩa là 'return false' không được thực hiện trong trình xử lý sự kiện – Sachin

+0

Thực hiện theo các bước được đưa vào trong các chú thích ở trên. –

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