2014-03-02 62 views
0

下面的代碼生成HTML頁面上什麼都沒有,它似乎打破在「狀態」:簡單的JavaScript/AJAX調用 - 不返回狀態

var get_json_file = new XMLHttpRequest(); 
get_json_file.open("GET", "/Users/files/Documents/time.json", true); 
**document.write(get_json_file.status);** 

記住,我是在Mac上,所以沒有C:​​驅動器....然而,這行代碼就很好地工作:

document.write(get_json_file.readyState); 

我只是想知道,我是能夠成功地找到我的JSON文件。也許,我應該問,我應該尋找什麼來實現我想要的?

回答

0

只有在ajax完成後才能獲得狀態。也就是說,當頁面被加載時,或者返回了404。

由於您在發送請求後試圖直接撥打status(或未發送,請閱讀P),您什麼都沒有收到。

你需要做一個異步調用,檢查狀態,只有當請求完成:

get_json_file.onreadystatechange = function(){ 
    if (get_json_file.readyState==4 && get_json_file.status==200) 
    { 
     alert('success'); 
    } 
} 

閱讀更多http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

PS由@Oscar指出的,你錯過send()


如果你想嘗試一個同步的方法,這將運行,直到返回響應停止代碼,你可以嘗試:

var get_json_file = new XMLHttpRequest(); 
get_json_file.open("GET", "/Users/files/Documents/time.json", false); 
//notice we set async to false (developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) 
get_json_file.send(); //will wait for a response 
document.write(get_json_file.status); 
//(Credit: orginial asker) 
+0

我注意到這段代碼確實有效 - 當我將其改爲false時,您如何解釋? – user3134565

+0

確實。如果你願意讓你的代碼停止,你可以將'async'設置爲'false'。這樣,javascript將等待'send()'方法的響應完成 – TastySpaceApple

2

AJAX的另一個基本問題。我建議你閱讀關於使用XMLHttpRequest的MDN article。在準備就緒之前,您無法訪問'status'屬性,並且您甚至沒有調用執行實際請求的'send()'方法。沒有首先發出HTTP請求就無法獲得狀態。在嘗試使用它之前瞭解AJAX如何工作。解釋這一切將會太長,而這不是這個地方。

0

因爲你是不允許發送安全問題請求本地系統上的文件,但您可以做的是查看fileReader API。 (更多信息here

<sidenote> 
The reason that the readyState works and not status is because by defualt 
readyState has a value of 0 and status has no value so it would be undefined. 
</sidenote> 
0
在我的Ubuntu

,路徑將與文件前綴:///

我想你的JSON文件路徑應該有文件:///用戶/文件/文件/ time.json,因爲基於UNIX

MAC和Ubuntu,然後你可以使用,如果你使用谷歌瀏覽@TastySpaceApple回答

檢查阿賈克斯狀態,不要忘了與--allow-文件 - 啓動它從文件訪問命令,因爲谷歌瀏覽器不加載本地f由於安全原因默認爲ile