2014-04-25 136 views
3

這裏是我的js說用了jQuery blockUI插件:ajax請求不能在Django中工作?

$(document).ajaxStop($.unblockUI); 

$('#submit-id-submit').click(function() { 
    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
}); 

我的觀點:

def test_ajax(request): 
    time.sleep(20) 
    print "in test_ajax" 
    return HttpResponse("hell world") 

url(r"search/test/$", test_ajax,name="dummy"), 

首先,我看到了Ajax調用返回錯誤(因爲我從錯誤警報,但它不顯示錯誤信息)

其次,我的視圖test_ajax沒有被調用,因爲我期望那裏的print語句被執行,但它不會執行。

我無法弄清楚這裏出了什麼問題。

+0

你能到位在Chrome的開發工具中提醒您的警報中的斷點,檢查錯誤併發布它? – Fiver

回答

4

我以前也有類似的問題。原因是你允許默認的表單提交。試試這個,看看你得到了什麼;

$('#submit-id-submit').click(function(e) { 
    e.preventDefault(); 
    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
}); 

或者乾脆return false

$('#submit-id-submit').click(function() { 

    $.blockUI({message:'<h1><img src="{% static 'css/spinner.gif' %}" /> Just a moment ...</h1>'}); 
    $.ajax({ 
    url: "/search/test/", 
    cache:'false', 
    dataType: 'text', 
    type:"GET", 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(data){ 
     alert('error; '+ eval(error)); 
    } 
    }); 
    return false; 
}); 

通過這樣做既如此,可以防止默認動作(在你的情況表單提交我猜) 你可以閱讀更多有關此here;

+1

謝謝......它幫助 –

1

您的錯誤功能正試圖提醒error變量不存在。嘗試提醒data變量。

此外,爲了幫助解決問題,您可以檢查視圖函數與非AJAX GET請求一起使用。

最後,這不適用於您的情況,因爲您使用GET請求,但如果您需要執行AJAX發佈請求,則需要在標頭https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#ajax中發送CSRF令牌。