Проблема 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
?