2011-12-08 41 views
1

我在Django中使用jQuery進行AJAX調用。一切似乎都工作得很好,除了ajax調用沒有被返回,因爲成功函數沒有被執行。這是我的jQuery文件AJAX調用不返回 - 成功函數沒有在Django中執行

$.ajax({ 
      type: "POST", 
      url: "/contact_us/", 
      data: { 
      'name': name_val, 
      'email': email_val, 
      'message': message_val, 
      'subject': subject_val, 
      'cc': cc_val, 
      }, 
      success: function() 
      { 

      // display success message and reset values in the form fields 
      $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {}); 
      // clear the fields 
      $("#contact-name").val(""); 
      $("#contact-email").val(""); 
      $("#contact-message").val(""); 
      $("#contact-subject").val(""); 


      } 

     }); 

我不知道該怎麼視圖返回一個AJAX調用所以現在我只返回一個假消息,但它不工作。這裏是views.py

def contact_us(request): 
    if request.is_ajax(): 
     if request.method == 'POST': 
      name = request.POST.get('name', False) 
      email = request.POST.get('email', False) 
      message = request.POST.get('message', False) 
      subject = request.POST.get('subject', False) 
      cc = request.POST.get('cc', False) 

      recipients = ['[email protected]'] 
      if cc: 
       recipients.append(email) 

      from django.core.mail import send_mail 
      send_mail(subject, message, email, recipients) 
      return_message = "Sent mail" 
      return Httpresponse(return_message) 

return_message是假的,我甚至不想在我的迴應中處理它。但爲什麼阿賈克斯呼籲不回來,休息一切工作正常,我也收到郵件。

我剛剛意識到,我寫了一個非常愚蠢的錯誤,我寫了Httpresponse,而它必須是HttpResponse。現在它工作得很好

回答

0

你的成功函數沒有被執行的原因可能是因爲你沒有返回有效的xml。 jquery會檢查進來的數據,看看它是否是正確的格式,即xml,因爲您使用的是ajax調用。

重新格式化您的數據,或切換到不同的jquery調用。

來自jquery網站上的ajax調用。

成功(data,textStatus,jqXHR)函數,數組函數,如果請求成功,則調用 。該函數獲得三個參數: 參數:從服務器返回的數據,根據 格式化dataType參數;描述狀態的字符串;和jqXHR (在jQuery 1.4.x,XMLHttpRequest中)對象。從jQuery 1.5開始, 成功設置可以接受一組函數。每個函數將依次調用 。這是一個Ajax事件。

編輯:從jQuery網站的其他信息,請檢查您的MIME類型的返回:

注:我們必須確保MIME類型由 我們的選擇的數據類型相匹配的網絡服務器報告。特別是,XML必須由 服務器聲明爲text/xml或application/xml以獲得一致的結果。

+0

我沒有在成功調用中返回任何數據,它就像當函數掉下來時那麼我想做成功任務 – Sachin

+0

我指的是你的django函數,HttpResponse(return_message)是無效的xml。因此,jquery ajax調用不會觸發您的成功函數,因爲http響應類型設置不正確。你可以改變你的ajax調用期望的文本類型,然後它會激發你成功。還掛鉤錯誤功能,看看他們告訴你什麼。 –

+0

由於我上面編輯過的問題不是用xml,那是我犯了一個錯誤。不管怎樣,非常感謝幫助 – Sachin

1

我看不到您的代碼的任何即時問題。如果你有Firebug,打開'Net'標籤,你應該能夠看到收到的響應代碼並檢查響應。你應該得到'200 OK'。

另一個調試選項 - 嘗試將在以下幾點:

$.ajax({ 
      type: "POST", 
      url: "/contact_us/", 
      data: { 
      'name': name_val, 
      'email': email_val, 
      'message': message_val, 
      'subject': subject_val, 
      'cc': cc_val, 
      }, 
      success: function() 
      { 
      // display success message and reset values in the form fields 
      $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {}); 
      // clear the fields 
      $("#contact-name").val(""); 
      $("#contact-email").val(""); 
      $("#contact-message").val(""); 
      $("#contact-subject").val(""); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) 
      { 
       alert(errorThrown); 
      } 

     }); 

這應該告訴你問題是什麼,如果Ajax調用失敗。

0

這有點晚,但這裏是。

您是否通過了CSRF token與您的ajax請求?

要明確做到這一點每個請求,加入令牌中的數據如果您希望與每個請求自動發送令牌被髮送到服務器

$.ajax({ 
... 
data: { 
... 
csrfmiddlewaretoken: '{{ csrf_token }}', 
... 
}, 
... 
}); 

,那麼你就必須跳通過鏈接中描述的箍。

無論哪種方式,請務必在您的settings.py文件中爲您添加django.middleware.csrf.CsrfViewMiddlewareMIDDLEWARE_CLASSES列表。