2013-07-30 2 views
0

прежде всего, Сори за мой английский ...код Аякса не работают

  • «Func 0» является Аякса.
  • «func 1» - это код обновления ajax-кода каждые 1000 мс. когда код работает, обновите страницу refesh.php и отправьте текст на него в div «bbb».
  • «func 2» - это код, в котором участник пишет текст, а затем текст отправляется на страницу send.php (текст отправляется на mySQL), а затем он отображает текст в div «aaa».

Кто-то может помочь мне понять, почему код не работает?

  • Если я поставил на страницу только «func 0» и «func 1», все работает хорошо.
  • , и если я поставил на страницу только «func 0» и «func 2», все также работает хорошо.
  • но если я положил на страницу все функции 3, ее не работает. Я не знаю, почему, когда пользователь пытается отправить текст, он отправляет текст на mySQL (func 2), но его показывает текст с refresh.php (func 1) на «aaa» div (func 2), вместо того, чтобы показывать текст, который участник отправляет в div «aaa».

я надеюсь, что вы будете в состоянии выяснить, в чем проблема, у меня было немного трудно объяснить


это коды:

<!--- 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. Просто сделайте это:

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», его отправить, и все работает хорошо. но если после этого он попытается отправить текст enother, например «00000», он по-прежнему отправит первый текст (11111). Как я могу это исправить? – ldoroni

0

Потому что у вас есть только один глобальный xmlhttp переменной. Если вы поместите обе функции на страницу, может случиться так, что они попытаются параллельно отправить два запроса, которые затем будут мешать. Сделайте его локальной переменной:

var xmlhttp = … 
Смежные вопросы