2011-07-16 26 views
0

私はAJAXとJQueryを初めて使うので、私は考えることができる最も簡単なAJAX POSTを実装しようとしています。私はボタンを持っています。クリックすると、基本的なPOSTデータを同じページ(http:// {{my ip address}}/django/ajax /)に送信したいと思っています。私が持っている私の.htmlファイルにDjango/AJAX/JQuery - 簡単なPOSTのトラブル

:view.pyで

<script type="text/javascript"> 
    function pythonizer(){ 
     $("#msgid").append("it SHOULD post after this is appended"); 
     $.ajax({ 
     url: '/django/ajax/', 
     type: 'POST', 
     data: {'obj': "test string"}, 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     success: function(response) { 
        alert(response); 
      } 
     }); 
     } 
</script>  

<div id="msgid"> 
</div> 

<input type="button" id="myButton" value="click me" onclick="pythonizer()" /> 

そして、私の関連する機能は次のとおりです。

def ajax(request): 
    if request.method == 'POST': 
     return HttpResponse("Hello AJAX") 

    return render_to_response('huh.html', {}) 

シンプルな、右?しかし、私のボタンをクリックすると、 "これは後に投稿するべきです"というメッセージがdivに正常に追加されますが、何も起こりません.HttpResponse( "Hello AJAX")は返されず、POSTは返されませんワーキング!

私が書いたものは、私が読んだドキュメントと一貫しているようですが、私は何か愚かなものが見つからない、またはPOSTを単純化しようとしている気がします。前もって感謝します!

+0

あなたはJSエラーを持っていますか?多分、JS var "data"は未定義です。 – Guy

+0

もっと明示的に変更しました。これはデータ:{'obj': "test string"}です。 POSTはまだ正常に動作していないようです。 –

答えて

1

私はdjangoやpythonについては分かりませんが、JavaScriptの問題は、AJAX呼び出しが完了しても何もしていないことです。

<script type="text/javascript"> 
function pythonizer(){ 
    $("#msgid").append("it SHOULD post after this is appended"); 
    $.ajax({ 
    url: '/django/ajax/', 
    type: 'POST', 
    data: {'obj':data}, // <-- possible error? 
    dataType: 'json', 
    contentType: "application/json; charset=utf-8", 
    success: function (response) { 
     alert(response); 
    } 
    }); 
    } 
</script> 

これは、応答に書き込むもの(おそらく "Hello AJAX")を警告します。

また、スクリプトにエラーがあります。「データ」は定義していません(data: {'obj':data},など)。他の場所でdataと宣言していない限り、このスクリプトはそのまま実行されません。

+0

Firefoxを使用している場合はFirebugをインストールするか、Chromeの場合はJavascriptコンソールを開いてエラーを確認することをおすすめします。それぞれの[ネットワーク]タブを使って、あなたのajaxリクエストが実際に通過しているかどうか、そしてその状態が何かを確認することもできます。 – evan

+0

エラーではない "undefined"と書かれているのは、 'pythonizer()'が何も返さないからです。もし 'return true;'や何かを末尾に追加すると 'true'と表示されます。 'response'は問題ありません。 – evan

+0

申し訳ありませんが私は明確でない場合 - あなたは "trueを返す"を追加します。 'pythonizer'関数の最後に追加します。 'undefined'は**間違いではありません**。 [ネットワーク]タブを見ましたか?ネットワークタブをチェックすることで、POSTが実行されているかどうかを確実に確認することができます。 – evan

0

ここでエラーが発生することがありますか?

success: function(response) 

私は はPythonがまったく要求を受信して​​いる...デバッグ情報なしでより多くを伝えることはできませんか?多分それはそれはCSRFの検証を拒否し、あなたはそれを追加してインポートする必要があるという問題です:

@csrf_exempt 
def myview(request): 
    print 'hello' 

おそらくあなたはここでそれについての詳細を読むことができる:https://docs.djangoproject.com/en/1.2/releases/1.2.5/#csrf-exception-for-ajax-requests

たぶん、その優れた最初の私見で深く行きません?

なぜ、別のjQueryショートカットを使用してみませんか?

$.post('/django/ajax/', data, function(data){ 
           alert(data); 
           }); 

たぶん私はあなたの個人的なコードで間違ってんだけど、私はそれがここに公式の助けだとあなたは、単にそれを理解すると思う:http://api.jquery.com/jQuery.post/

これには2つの良いものがあります。

  1. Firebugの
  2. Djangoのデバッグツールバー(Mozilla Firefoxのは、おそらくいくつかの他のブラウザでは、あまりにも良いです)

これらはPythonとjQueryの両サイドでデバッグするのに適しています...それらを使用する方法を習得してください...(もしあなたがまだそうでないなら、あなたにそのような明白な事を教えてもらえません:))

0

JSONレスポンスが必要な場合を想定しています。

jquery documentは、使用できるさまざまなデータタイプについて説明しています。 dataType:'json'が使用されている場合、ajaxメソッドは応答コンテキストタイプがJSONであることを期待しています。テンプレートのHTMLファイルに

これを試してみてください。

<script type="text/javascript"> 
function pythonizer(){ 
    var data = "data"; 
    $("#msgid").append("it SHOULD post after this is appended"); 
    $.ajax({ 
     url: '/django/ajax/', 
     type: 'POST', 
     data: {obj:data}, 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     success: function (response) { 
      alert(response); 
     } 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
} 
</script> 

あなたのviews.pyでこれを試してみてください:

import json 
from django.http import HttpResponse 

def ajax(request): 
    if request.method == 'POST': 
     return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")