Don';不要等到javascript结束函数

Don';不要等到javascript结束函数,javascript,ajax,wait,Javascript,Ajax,Wait,我正在处理onkeydown事件,以便获取写值(在文本区域中),在PHP文件上处理它(通过Ajax post传递),并在外部div中显示结果。。。 问题是每次我按下这个键,直到Ajax完成它的任务,我才能继续写。即使文本尚未处理,我如何才能使其保持书写 ---编辑--- function fromWCtoHTML(source){ var act = new Date(); http[act] = createRequestObject(); http[act].open('post',

我正在处理onkeydown事件,以便获取写值(在文本区域中),在PHP文件上处理它(通过Ajax post传递),并在外部div中显示结果。。。 问题是每次我按下这个键,直到Ajax完成它的任务,我才能继续写。即使文本尚未处理,我如何才能使其保持书写

---编辑---

function fromWCtoHTML(source){
 var act = new Date();
 http[act] = createRequestObject();
 http[act].open('post', '/php/fromWCtoHTML.php',false);
 http[act].setRequestHeader('Content-Type','application/x-www-form-urlencoded',false);
 http[act].send("source=" + source);
 document.getElementById('AJAXWCtoHTML').innerHTML=http[act].responseText;
}

您已将
async
设置为false:

http[act].open('post', '/php/fromWCtoHTML.php',false);
                                               ^^^^^^
这使得它阻塞。不要那样做


但是,请注意,大多数人键入字符的速度比发出HTTP请求和接收响应的速度快,因此每次按键发送请求都不是一个好主意。

您可以使用XMLHttpRequest中的onreadystatechange事件,只需输入
document.getElementById('AJAXWCtoHTML')。innerHTML=HTTP[act].responseText;
并设置事件处理程序。

http[act].open('post','/php/fromWCtoHTML.php',false)

第三个参数[
false
]导致您的请求同步。 将其更改为
true
或不包含它

编辑对声明http[act].responseText为空的注释的响应

添加一个
onreadystate
事件处理程序。请尝试以下代码

function fromWCtoHTML(source){
 var act = new Date();
 http[act] = createRequestObject();
 http[act].open('post', '/php/fromWCtoHTML.php');
 http[act].setRequestHeader('Content-Type','application/x-www-form-urlencoded',false);
 http[act].send("source=" + source);
  http[act].onreadystatechange=function(){
 if (http[act].readyState==4 && xmlhttp.status==200)
    {
    document.getElementById('AJAXWCtoHTML').innerHTML=http[act].responseText;
    }
}

我们可以看看你的ajax代码吗,看起来你有
async:false
,这将使它成为一个同步调用。如果我将其更改为true,它不会给出任何结果(空白txtReponse)。考虑到我希望在外部div中实时预览用户正在编写的内容,我还能怎么做?它不会给出响应,因为您正在立即读取响应,而不是等待响应返回。您需要一个readyStateChange处理程序。任何Ajax教程都应该解释这一点。谢谢,现在它正在工作。不必每次按键都发送请求,还有什么更好的方法来做同样的事情呢?跟踪您发出的请求,这样您就不会有多个请求在飞行中。如果在按下某个键时或当请求返回且自上次发送键后又按下了某个键时,您没有正在运行中,请发送一个新的。最好的方法是在用户开始键入时添加一个计时器(例如,秒,此数字越大,用户在两次按键之间的时间越长),一旦计时器过期,然后运行ajax功能,每次用户键入另一个键时,请重置计时器。谢谢,但是。。。如果我这样做,则
http[act].responseText
response是空的。现代浏览器(包括IE>IE6)也接受此选项,而不是
onreadystatechange
事件中的
http[act]