Проблема Firefox с Javascript: не обновляется статус при отправке формы

Уже много раз я пытался отправить данные формы через Ajax на серверный скрипт, не обновляя страницу (используя событие onSubmit формы). Все это прекрасно работает со всеми браузерами (Chrome, IE и т. Д.), Но когда дело доходит до Firefox, обработка просто продолжается. Я имею в виду, что даже если данные были отправлены на серверную часть (да, часто я получаю данные на серверной стороне, но клиент все еще обрабатывает), клиент не отвечает на последовательные вызовы,

Например, рассмотрим один из моих примеров кодов:

Вот этот JavaScript

function submitComment(id)
{
 //id is the id of the postbox
 var content=$("#"+id).val();
 var xmlhttp;
 if(window.XMLHttpRequest)
  xmlhttp=new XMLHttpRequest();
 else
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

 xmlhttp.onreadystatechange=function()
 {
  if(xmlhttp.readyState==4 && xmlhttp.status==200)
  {
   //action taken in response to the script from server in response to this form submission, eg, enabling back the submit button
   $('input[type="submit"]').removeAttr('disabled');
  }
 }

 $('input[type="submit"]').attr('disabled','disabled');
 xmlhttp.open("POST",host+"comment.php?mode=newpost",true);
 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xmlhttp.send("post="+content);
 $('#status').html('Posting your comment. Please wait...');//shows this status as long as gets no response from server
 return false;
}

И вот его HTML:

<form id='newpostform' method=post action='' onSubmit="return submitComment('post')" >
 <textarea id='post' name='post'></textarea>
 <input type=submit value=Post>
 <span id='status' style='padding:10px; font-size:12px; color:black; font-family:cambria, segoe ui;'>
 </span>
</form>

Таким образом, во всех браузерах, кроме Firefox, кнопка отправки на некоторое время отключена, пока сценарий не сообщит сообщение на сервер, и когда сервер ответит обратно, кнопка отправки будет активирована назад и статус обновится.

Проблема возникает именно здесь, в Firefox. Строка состояния никогда не меняет своего статуса, даже если данные были переданы на сервер!

1 ответ

Решение

Ответ из комментария на вопрос:

Получил решение моей проблемы. XMLHTTPRequest.status возвращает 0, а responseText пуст в FireFox 3.5

Это было только из-за того, что я использовал абсолютный путь. Использование относительного пути решило мою проблему.

Отлично!


Что касается вашего дополнительного вопроса:

Тем не менее, я все еще путаюсь с тем фактом, что я должен использовать относительный путь вроде этого: index / index.php в атрибуте пути файла сценария, находящегося в самом каталоге index. Зачем? Я имею в виду, что просто использование index.php должно было решить проблему, не так ли?

Как я понял, у вас есть ваш HTML на http://example.org/test.html с

<script src="subdir/main.js>

... который разрешается в http://example.org/subdir/main.js, который вызывает XMLHttpRequest:

xhr.open("POST", "index.php", true);

Это запрашивает http://example.org/index.php, а не http://example.org/subdir/index.php

Это связано с тем, что относительные URL-адреса в XMLHttpRequest (как и во многих других случаях) разрешаются относительно базового URL-адреса документа, а не URL-адреса сценария.

Если относительные URL-адреса были сопоставлены с URL-адресом скрипта, это может показаться очень запутанным: представьте, что у вас есть jQuery на /lib/jquery.js, который вызывает XMLHttpRequest и ваш собственный код в /main.js вызов jQuery.ajax(... "data.txt" ...) . Если этот запрос /data.txt или же lib/data.txt?

Другие вопросы по тегам