2011-12-08 25 views
1

DjangoでjQueryを使用してAJAX呼び出しを行っています。成功関数が実行されていないため、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(""); 


      } 

     }); 

です。ここにはviews.pyがあります

return_messageはダミーなので、私の応答で処理したくないです。しかし、なぜアヤックスの呼び出しが戻って来ない、残りのすべてがうまくいっていると私はまた、メールを受信して​​います。

私はHttpResponseでなければならないのに対し、私は非常にばかげた間違いをしたことを真面目に考えました。今は絶対にうまく動作しています

答えて

0

成功関数が実行されていない理由は、有効なxmlを返さないためです。 jqueryは、ajax呼び出しを使用しているため、正しい形式(別名xml)かどうかを確認するためにデータをチェックします。

データを再フォーマットするか、別のjquery呼び出しに切り替えます。

jQueryのウェブサイトからajaxコールを入手してください。

成功(データ、textStatus、jqXHR)関数は、Array関数は、要求が成功した場合 が呼び出されます。関数は3つ渡されます。 引数:サーバから返されたデータ。 のdataTypeパラメータに従ってフォーマットされます。ステータスを表す文字列。 jqXHR (jQuery 1.4.x、XMLHttpRequest)オブジェクトです。 jQuery 1.5以降では、 成功設定は一連の関数を受け入れることができます。各機能は、 が順に呼び出されます。これはAjaxイベントです。

編集:jqueryのサイトから追加情報、復帰のためのあなたのMIMEタイプをチェックしてください。

注:私たちは、MIMEタイプがデータ型の我々の選択と一致する Webサーバーによって報告されたことを確認する必要があります。特に、一貫した結果を得るためには、XMLを としてtext/xmlまたはapplication/xmlとして宣言する必要があります。

+0

私は成功呼出しでデータを返さない、関数が最後に落ちたときのように成功の仕事をしたい。 – Sachin

+0

HttpResponse(return_message)が有効なxmlではないあなたのdjango関数を参照している。したがって、http応答タイプが正しく設定されていないため、jquery ajax呼び出しは成功関数を起動しません。あなたは、あなたのAjax呼び出しがテキストに期待しているタイプを変更することができます。また、エラー関数をフックし、それらがあなたに何を伝えるかを見てください。 –

+0

上記で編集したように、問題はxmlではなく、私はtypoを作成していました。とにかく助けてくれてありがとう。 – 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

これは少し遅れますが、ここにあります。

あなたのAjaxリクエストにCSRF tokenを渡していますか?明示的にトークンが要求ごとに自動的に送信されるようにしたい場合は、あなたがジャンプする必要がありますサーバー

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

に送信されるデータにトークンを追加し、各要求でこれを行うには

リンクに記載されているフープを介して。

いずれにしても、settings.pyファイルのMIDDLEWARE_CLASSESリストにdjango.middleware.csrf.CsrfViewMiddlewareを追加してください。