Firefox与Javascript的问题:表单提交时未更新状态

Firefox与Javascript的问题:表单提交时未更新状态,javascript,forms,firefox,onsubmit,Javascript,Forms,Firefox,Onsubmit,现在我多次尝试通过Ajax将表单数据发送到服务器脚本,而不刷新页面(使用表单的onSubmit事件)。所有浏览器(Chrome、IE等)都可以正常工作,但对于Firefox,处理过程一直在进行。我的意思是,即使数据已经发送到服务器端(是的,很多时候,我在服务器端得到了数据,但客户端仍在处理中),客户端也不会响应连续的调用 例如,考虑我的一个示例代码: 下面是Javascript function submitComment(id) { //id is the id of the postbox

现在我多次尝试通过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之外的所有浏览器中,submit按钮都会被禁用一段时间,直到脚本将post传递给服务器,并且当服务器响应时,submit按钮会被激活,状态也会更新


问题就出现在Firefox中。即使数据已传送到服务器,状态栏也不会更改其状态

关于这个问题的评论的答案是:

找到了解决我问题的办法

这只是因为我使用的是绝对路径。使用相对路径解决了我的问题

好极了


关于你的补充问题:

但是,我仍然对这样一个事实感到困惑:我必须在驻留在索引目录本身的脚本文件的path属性中使用相对路径:index/index.php。为什么?我的意思是,简单地使用'index.php'应该可以解决这个问题,不是吗

据我所知,您的HTML位于

这要求,而不是

这是因为XMLHttpRequest中的相对URL(与许多其他情况一样)是反对的,而不是脚本的URL


如果相对URL是根据脚本的URL解析的,那么结果可能会非常混乱:假设您在
/lib/jQuery.js
处有jQuery,它调用XMLHttpRequest,而您自己的代码在
/main.js
处调用jQuery.ajax(…“data.txt”…)。如果此请求是
/data.txt
还是
lib/data.txt

您直接使用
XMLHttpRequest
等而不是JS库,有什么特别的原因吗?否则,直接使用
XMLHttpRequest
不会有任何问题,jQuery已经被用于操作DOM,因此不使用内置命令(如)有点奇怪。不过,我不认为这是本例中出现问题的原因。@Paul:Nah,我使用该代码仅显示了一个示例。我确实为此使用jQuery。但由于我是新手,我避免使用它。然而,即使使用jQuery,问题仍然没有得到解决。@PaulGrime:三小时内对您的评论投了三次赞成票,这让我想起:)说真的,浏览器特定的问题在不使用抽象的情况下最容易回答。我的问题得到解决了吗。这只是因为我使用的是绝对路径。使用相对路径解决了我的问题。但是,我仍然对这样一个事实感到困惑:我必须在驻留在索引目录本身的脚本文件的path属性中使用相对路径:index/index.php。为什么?我的意思是,简单地使用'index.php'应该可以解决这个问题,不是吗?总之,我的问题解决了,谢谢大家:)这里有这个链接
<script src="subdir/main.js>
xhr.open("POST", "index.php", true);