2014-11-24 24 views
0

找到答案:「數據」功能沒有打在看似成功的jQuery的崗位

我發現了問題 - 這是對我而言非常愚蠢的。我的點擊目標是與'#'的href鏈接,因爲我的點擊功能中沒有preventDefault,所以在數據發佈之前我正在刷新並且出現錯誤代碼10054:Connection reset

To Question :

有誰知道爲什麼下面的jQuery。員額成功功能無法正常工作或我如何檢查,看看它爲什麼不工作:

$('#delete_visit').click(function(){ 
    var vg_id = $("#id_visit_select").val();//select visit from a dropdown 
    $.post('{% url 'study.views.delete_visit' %}', 
    //posting to django view, this seems to work 
    { v_id: v_id }, 
    function(data){ 
    if (data){ 
    alert('data posted'); 
    //not hit, even though seems like django view succesfully deletes visit 
    } 
    else{ 
    alert('data post failure'); 
    //also not hit 
    } 
    } 
    );//end post 
    });//end click 

Django的看法:

def delete_visit(request): 
     v_id=request.POST['v_id'] 
     if v_id: 
      v_obj=Visit.objects.get(id=v_id) 
      print v_obj.id, 'it works!' # this all prints 
      v_obj.delete() 
     return HttpResponse('a') 
+0

一般來說,我想知道一個更好的方法來調試這些ajax帖子,而不是隻留下警報地雷 – amchugh89 2014-11-24 19:38:48

回答

1

有各種工具可以幫助調試這些類型的情況。

如果我要開始調試這個問題,我會先查看服務器上可能存在的任何錯誤日誌,看看是否有任何異常提出。如果一切順利那裏,我會用一個叫做「PDB」(https://docs.python.org/2/library/pdb.html)工具,並在視圖開始插入一個破發點,並通過查看每一行代碼來驗證一切是否正常工作......

def delete_visit(request): 
     import pdb; pdb.set_trace() 
     v_id=request.POST['v_id'] 
     if v_id: 
      v_obj=Visit.objects.get(id=v_id) 
      print v_obj.id, 'it works!' # this all prints 
      v_obj.delete() 
     return HttpResponse('a') 

如果所有檢查都在那裏完成,那麼是時候查看客戶端代碼並查看發生了什麼。大多數現代瀏覽器都帶有控制檯來檢查和監控所有網絡請求和JavaScript代碼。我首先看看記錄的網絡請求,看看你的ajax請求實際返回了什麼。它可能會返回一個不成功的代碼,如500或404.如果是這種情況,那麼您將爲$ .post函數使用的jQuery回調函數將不會被調用,因爲該函數僅在成功響應時執行。

關於是否有更好的方法來調試ajax,試着插入語句'debugger;'或者在瀏覽器開發工具中放置一個斷點,以便像pdb一樣執行。

+0

謝謝。我一直在使用螢火蟲,我的老闆指出使用新版本可能會更好,他是對的。另外,他在firefox> developer>瀏覽器控制檯上向我發起了攻擊。這是真正有用的調試js – amchugh89 2014-12-10 19:42:20

+1

是的,因此'線'大多數現代瀏覽器帶有控制檯來檢查和監控所有網絡請求和JavaScript代碼。' :)很高興你正在搞清楚它! – 2014-12-10 23:51:21