2013-07-30 61 views
0

首先,索裏,我的英語...AJAX的代碼不工作

  • 的 「FUNC 0」 是阿賈克斯。
  • 「func 1」是每1000毫秒刷新ajax代碼的代碼。當代碼工作時刷新refesh.php頁面並將其上的文本發送到「bbb」div。
  • 「func 2」是成員編寫文本然後將文本發送到send.php頁面(文本發送到mySQL)然後在「aaa」div中顯示文本的代碼。

有人可以幫我瞭解爲什麼代碼不工作?

  • 如果我在頁面中只放入「func 0」和「func 1」,一切正常。
  • 如果我只在「func 0」和「func 2」頁面中放置,所有東西都可以正常工作。
  • 但如果我把頁面上的所有3功能,它不起作用。我不知道爲什麼當成員試圖發送文本發送文本到MySQL(func 2),但它顯示文本refresh.php(func 1)「aaa」 div(func 2),而不是顯示成員發送到「aaa」div的文本。

我希望你能找出什麼問題了,我有一個有點難以解釋


這是代碼:

<!--- func 0 ---> 
<script> 
function refresh(name, url, info, type) 
{ 
var str; 
if (type=="send") { 
str = document.forms["aaa"]["txt"].value; 
} 
if (type=="send" && str=="") 
    { 
    document.getElementById(name).innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById(name).innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET",url+"?info="+str,true); // send the text to page 
xmlhttp.send(); 
return false; 
} 
</script> 
<!--- end - func 0 ---> 


<!--- func 1 ---> 
<script type="text/javascript"> 
setInterval("refresh('bbb', 'refresh.php', '', 'refresh')", "1000"); 
</script> 
<div id='bbb'> div to refresh at 1000 ms </div> 
<!--- end - func 1 ---> 


<!--- func 2 ---> 
<form name='aaa' onsubmit="return refresh('aaa', 'send.php', '', 'send');" method='post'> 
txt: <input type='text' name='txt' autofocus='autofocus'> <input type='submit' value=' send '> 
</form> 
<div id='aaa'> div that <b>*send*</b> txt to sql </div> 
<!--- end - func 2 ---> 
+0

對於故障排除,零件/零件沒什麼意義。如果這是以jsFiddle的形式,那將會容易得多。請嘗試設置一個。 – DevlshOne

+0

@DevlshOne AJAX同源策略不會阻止它工作嗎? – Barmar

+0

你在任何地方遇到任何錯誤?什麼不正確? – rednaw

回答

2

的主要問題是xmlhttp被定義爲全局變量,所以如果你碰巧有兩個AJAX查詢同時加載,它們將互相干擾。使用var xmlhttp來解決這個問題。

這就是說,你不應該支持IE6,甚至不如IE5。因爲你只有一個全局變量xmlhttp

var xhr = new XMLHttpRequest(); 
xhr.open("GET",url+"?info="+str,true); 
xhr.onreadystatechange = function() { 
    if(this.readyState == 4 && this.status == 200) { 
    document.getElementById(name).innerHTML = this.responseText; 
    } 
}; 
xhr.send(); 
+0

感謝它的工作! =]但現在我有問題。如果該成員嘗試發送文本,例如「11111」,則發送並且一切正常。但如果之後他嘗試發送其他文本,例如「00000」,它會繼續發送第一個文本(11111)。我怎樣才能解決這個問題? – ldoroni

0

:只要做到這一點。如果您將兩個函數都放在頁面上,可能會發生它們試圖並行發送兩個請求,然後這些請求會發生干擾。將其作爲本地變量:

var xmlhttp = …