2011-03-29 197 views
0

大家好! 我正在寫一個簡單的Django應用程序。在其中一個頁面上有腳本,它用於點擊按鈕並使用ajax帖子。 問題是:post方法不會導致服務器代碼執行,只是每次都會執行錯誤函數。爲什麼後沒有做任何事

腳本:

<script type="text/javascript"> 
    (function($) { 
     $(document).ready(function(){ 
      {% for obj in cl.result_list %} 
       $('#done_{{ obj.pk }}').click(function() { 
        if ($(this).html().indexOf("icon-yes") != -1) { 
         $action = "no"; 
        } 
        else { 
         $action = "yes"; 
        } 
        $.ajax({ 
           type: "POST", 
           url: "/on_hold_done/done/" + $action + "/{{ obj.pk }}/", 
           success: function(response) { 
            alert("success") 
           }, 
           error: function(response) { 
            alert("error") 
           } 
          }) 
       }); 
      {% endfor %} 
     });})(django.jQuery); 
</script> 

在urls.py:

(r"^on_hold_done/(on_hold|done)/(yes|no)/(\d*)/$", "todo.views.on_hold_done") 

在views.py:

@staff_member_required 
def on_hold_done(request, mode, action, pk): 
    """simple code here""" 
    return HttpResponse('') 
+3

使用Firebug查看您從服務器獲得的響應。 – ThiefMaster 2011-03-29 12:58:57

+0

$ action變量看起來像可能會導致問題,因爲$在jQuery中有特殊的功能。 – 2011-03-29 13:26:18

+0

@Bjorn:命名變量'$ action'不是問題。 JavaScript變量可以包含'$'字符。 '$'變量只是對'jQuery'的引用。 – 2011-03-29 13:33:58

回答

0

如果你使用Django 1.3,注意,所有的AJAX請求現在受到跨站請求僞造保護,所以您需要添加一些額外的JS以自動將CSRF令牌包含在您的a jax提交。 See the docs here

+0

謝謝,我剛剛在解決問題的同一點。問題的原因確實是在沒有使用CSRF的情況下。而且在解析url時也存在問題。 – blazkovicz 2011-03-29 17:40:12

+0

任何人都可以解釋我爲了通過CSRF應該怎麼做?我找不到任何代碼示例。 djangoproject的解決方案對我不起作用,因爲響應中有一段html,而不是文檔或httpresponse。 – blazkovicz 2011-03-29 17:59:48

+0

添加這裏提到的JS http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax - 這將automaticaly插入CSRF標記作爲您的AJAX請求中的附加標頭 – 2011-03-30 10:55:38

相關問題