2010-07-08 135 views
2

我只是在學習如何利用jquery和jquery,並且我碰到了一個我不明白的磚牆。jQuery .getJSON不能正常工作

這裏是我的代碼 - 非常簡單的代碼:

$("#click").click(function() { 
    $.getJSON("http://localhost/jsontest/a.json", function(data) { 
     alert("done"); 
    }); 

    }); 

基本上,負載a.json併發送警報到屏幕說法完成。

這裏是a.json的內容:

{ 「完成」: 「37」}

就是這樣。

儘管沒有顯示警報,但它不起作用。

任何想法的人?

+1

http://livehttpheaders.mozdev.org是你的朋友。 – Anders 2010-07-08 13:10:06

+1

發出請求的頁面的網址是什麼? – 2010-07-08 13:17:00

+0

嗯,這是一個JSON「得到」,所以不應該是一個問題... – Pointy 2010-07-08 13:19:02

回答

1

我打賭這樣的:你忘了安裝程序代碼在<script>區塊之後您的「單擊」元素或「準備就緒」處理程序中:

$(function() { 
    $('#click').click(function() { /* ... same stuff as you have ... */ }); 
}); 
1

從螢火蟲返回有錯誤嗎?

我想通過改變開始:

$.getJSON("http://localhost/jsontest/a.json?callback=?", function(data) { 

到:

$.getJSON("http://localhost/jsontest/a.json", 'callback=?', function(data) { 
+0

從Firefox返回沒有錯誤 - 我試着用... a.json?callback =? - 仍然沒有工作。 它現在可以工作 - 警報(data.done)做到了。 謝謝你們:-) – icecreamsoop 2010-07-08 13:19:22

+1

所以當你說「警報沒有顯示」,你的意思是「警報發生,但它只包含'done'這個詞? – Pointy 2010-07-08 13:25:55

1

試試這個:

$.getJSON("http://localhost/jsontest/a.json", { }, function(data) { 
    alert(data.done); 
}); 
+3

這不是必需的。如果jQuery發現第二個參數是一個函數,它假定這個調用看起來像原始問題中的調用。 – Pointy 2010-07-08 13:17:26

+0

+1 - 不需要'{},'部分,回調可以是第二個參數,但alert(data.done)(而不是字符串「done」)是正確的。 – 2010-07-08 13:22:51

+0

嗯,是的,但他說警報沒有顯示。 @尼克你是公認的大師,發現「忘了把代碼放在'準備'處理程序」的問題! – Pointy 2010-07-08 13:24:32

8

我剛剛遇到了一個問題,那就是我沒有格式化正在檢索的文件中的數據。如果文件中的JSON有任何問題,它會自動失敗。儘管你總是可以添加.fail(函數)來檢測失敗。

我用的是:{ varname:"my string" }

當我本來應該使用:{ "varname":"mystring" }

出於這個原因,我認爲這可能是最好使用去檢索與$獲得(數據),然後使用JSON.parse()就可以了。這樣你就知道get或parse是否失敗。