2016-01-05 143 views
1

我一直在嘗試使用jquery-ajax從我的服務器下載二進制文件,我終於放棄了。所以現在我試圖使用XMLHttpRequest來代替。然而,我甚至無法得到一個簡單的例子工作。XMLHttpRequest似乎沒有做任何事情

奇怪的是,這段代碼似乎沒有做任何事情。我從w3schools複製/粘貼此示例,此示例與其他示例幾乎相同。它不爲我在Chrome瀏覽或FF工作:

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     // Action to be performed when the document is read; 
    } 
}; 
xhttp.open("GET", '/blah/blah/output.png', true); 
xhttp.send(); 

我們進入的onreadystatechange函數只有一次,在的open()聲明與xhttp.readyState等於一個,但不能在發送()一步。我認爲它至少會拋出某種錯誤,而不是什麼都不做。

另外,作爲一個實驗,我故意給open()一個不好的url - 但是沒有回覆。

有人可以告訴我我可能會做錯什麼嗎?

非常感謝。

+1

所以你打開控制檯(F12),然後檢查錯誤? – adeneo

+0

是的!我有「調試器」;作爲我的第一行,並且我經歷了無數次。 – edwardsmarkf

+0

對我來說工作得很好 - > https://jsfiddle.net/mevqgw23/ – adeneo

回答

2

你的代碼對我來說看起來是正確的,它指向一些外部原因。

您的代碼是否一直流到執行上下文的末尾?瀏覽器將保持網絡請求,直到引擎退回到瀏覽器。

例如:

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
    // Action to be performed when the document is read; 
    } 
}; 
xhttp.open("GET", '/blah/blah/output.png', true); 
xhttp.send(); 

while(true){} 

絕不會發送呼叫。

+0

yup - 我試着在沒有chrome-debugger的情況下運行它(偶爾會引入一些它自己的問題)。有沒有辦法解決? – edwardsmarkf

+0

嘗試將它放在它自己的函數中,並在函數調用前放置一個調試器語句。然後,您可以進入該功能,當您完成該功能時,上下文將結束,並且將發送該呼叫。 –

+0

請記住,send()並不實際發送呼叫。它只是標記要發送的調用,並且在將控制權交還給瀏覽器時,瀏覽器中的本機代碼將處理它。 –

相關問題