2014-09-28 61 views
0

這裏是我的JavaScript函數: -XMLHttpRequest的輸出未顯示

解決JavaScript函數: -

function delfile(fileid) { 
    var div = "fileid_" + fileid; 
    var location = "/delfile/" + fileid; 
    if (window.XMLHttpRequest) 
    { 
    var xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     document.getElementById(div).innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("POST", location, true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send(""); 
} 

以下是我從PHP生成: -

echo "<td><div id='fileid_{$id}'><button onclick='delfile({$id})'>Delete File</button></div></td>"; 

我的問題是,當用戶同時點擊2-3個鏈接時,http請求通過javascript發送,並且服務器上的文件被刪除,但div id不會更新http請求的輸出。只有用戶最後點擊的按鈕纔會獲得http請求的輸出。

PHP腳本絕對沒有問題,我只是給它參考。 delfile腳本只發送「File Delted」。

通過使用@torazaburo建議的局部變量來解決。

+0

請刪除MS cruft。它僅適用於IE6及更低版本。你也可以刪除所有其他的XMLHttpRequest樣板文件,我們知道它是如何工作的。出於好奇,你寫了一本8年的書嗎? – 2014-09-28 18:05:02

+0

我希望它能夠在IE 6上工作,所以無法刪除它。 – 2014-09-28 18:16:38

+0

所有發達國家的IE6份額均低於1%。請參閱https://www.modern.ie/en-us/ie6countdown。當MS停止XP支持時,它會很快降到零。不管你是否想保留它取決於你,但請不要堵塞你的代碼示例與這些不相關的細節。 – 2014-09-28 18:33:50

回答

1

你沒有聲明xmlhttp本地的功能,這意味着它在多個請求之間共享,這是一個災難的祕訣。

當你在這裏,也請聲明$div$location本地的功能。此外,請刪除這些變量名稱的$前綴,因爲這種做法已知會腐爛大腦。

如果您已經提出「嚴格使用」,那麼您未能聲明變量將會被提取出來。在你的函數的頂部,如你所願。

+0

如何將其聲明爲局部變量? – 2014-09-28 18:59:34

+0

按照JS教程第一段中介紹的方式。提示:使用'var'。 – 2014-09-28 19:02:27

+0

我用var但仍然是同樣的問題。 – 2014-09-28 19:28:31