2011-07-16 96 views
0

我想實現最簡單的AJAX POST,我能想到的是因爲我是AJAX和JQuery的新手。想法是這樣的:我有一個按鈕,當它被點擊時,我想提交基本的POST數據到同一頁面(該頁面是:http:// {{my ip address}}/django/ajax /)。Django/AJAX/JQuery - 簡單POST故障

在我的.html文件我有:

<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()" /> 

和我view.py相關的功能是:

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

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

簡單,對不對?然而,問題是,當我點擊我的按鈕,「它應該後附加後」它成功地添加到該div,但沒有其他發生,HttpResponse(「你好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,或者如果您使用的是Chrome,請打開Javascript控制檯並檢查錯誤,我建議您安裝Firebug。您也可以使用每個網絡的網絡標籤來查看您的ajax請求是否實際通過,以及它的狀態是什麼。 – evan

+0

如果它只是說「未定義」,這不是一個錯誤,它只是因爲'pythonizer()'不會返回任何東西 - 如果你添加'return true;'或者其他東西到最後它會說'true'。 '響應'很好。 – evan

+0

對不起,如果我不清楚 - 你會添加「返回true;」到'pythonizer'函數的末尾。 'undefined'肯定是**,不是錯誤。 你看看網絡標籤嗎?通過檢查網絡選項卡,您將能夠明確地看到POST是否正在發生。 – evan

0

可能是錯誤嗎?

success: function(response) 

我不能告訴你更多沒有debug信息... 是蟒蛇接收請求呢?也許這是它拒絕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/

這有兩件好事:

  1. 螢火蟲(Mozilla Firefox和可能其他一些瀏覽器是太好)
  2. Django的調試工具欄

它們適合在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")