2009-02-21 155 views
25

我有一個HTML代碼:jQuery.getJSON不會觸發回調

<button>asd</button> 
<script type = "text/javascript"> 
$('button').click(
    function() { 
     $.getJSON('/schedule/test/', function(json) { 
      alert('json: ' + json + ' ...'); 
     }); 
    } 
); 
</script> 

和相應的視圖:

def test(request): 
    if request.method == 'GET': 
     json = simplejson.dumps('hello world!') 
     return HttpResponse(json, mimetype = 'application/json') 

視圖被執行(使用print測試),json變量被初始化,但沒有警報出現。我做錯了什麼?我已經看到了一些文檔(例如http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback),但我沒有找到答案。

編輯:問題是,沒有導入HttpResponse ...不幸的是Django沒有提供任何關於它的錯誤。其他一切都是正確的。 尊敬
chriss

+0

你是否已經備份並以純文本的形式嘗試過踢球? – Sampson 2009-02-21 13:35:41

回答

47

這可能是json不正確的形成。有時候這發生在我身上,當我的代碼,應該是生產json產生一個錯誤。有兩個選項:

  • 使用Firebug查看JSON響應

  • 安裝錯誤使用jQuery.ajaxSetup選項,比如在你的jQuery代碼處理:

    $.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) { 
         alert(textStatus); 
         alert(errorThrown); 
         alert(XMLHttpRequest.responseText); 
        }}); 
    

使用用於調試的錯誤處理非常好,因爲當您的響應出現問題時您會立即知道。你可以看看jQuery documentation for jQuery.ajax,它有jQuery.ajaxSetup的所有可用選項。

編輯:第三種方法是打開應該生成JSON的URL並通過JSON Lint運行輸出來驗證它。

+0

您可以指點或解釋如何使用FireBug檢查JSON嗎? – chriss 2009-02-24 10:35:31

3

您確定JSON有效嗎?直接看看響應或使用Firebug

0

我認爲你缺少的URL模式尾隨$。