Проблема AJAX — onSubmit

#javascript #html #ajax #dom

#javascript #HTML #ajax #dom

Вопрос:

Я довольно новичок в AJAX, поэтому, пожалуйста, простите меня.

У меня есть формы — первая работает, а вторая нет, и я не знаю почему. В первой html-форме нет кнопки отправки, но во второй есть. Они оба используют одну и ту же функцию javascript.

 <script type="text/javascript">
function showUser(str)
{
if (str=="")
 {
 document.getElementById("txtHint").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 amp;amp; xmlhttp.status==200)
   {
   document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
   }
 }
xmlhttp.open("GET","server_script.php?q=" str,true);
xmlhttp.send();
}
</script>
  

Из 1:

 <form>
<select name="users" onchange="showUser(this.value)">
<option value="0001">0001</option>
  

0002

Здесь будет указана информация о персонаже.

Из 2:

 <form onsubmit="showUser(this.foo.value)">
<input type="foo" >
<input type="submit" >
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>
  

Ответ №1:

На первом из них запускается ваш ajax onchange , как таковой, нет поведения по умолчанию, которое могло бы помешать этому.

Во второй форме вы используете onsubmit событие, которое по умолчанию отправляет форму обратно на сервер. Итак, вы должны return false или preventdefault в этом событии разрешить завершение вашего ajax-кода. Самым простым решением было бы просто добавить возвращаемое значение false:

 <form onsubmit="showUser(this.foo.value); return false;">
  

Ответ №2:

Заставьте showUser возвращать false, в противном случае форма будет отправлена браузером обычным способом.