不要等到javascript结束功能

时间:2012-08-09 13:26:19

标签: javascript ajax wait

我正在使用 onkeydown 事件来获取写入值(在textarea中),在PHP文件上处理它(通过Ajax传递它) post)并在外部div中显示结果... 问题是,每次按下键,我都无法继续写,直到Ajax完成任务。即使文本尚未处理,我怎样才能继续写作?

--- --- EDIT

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;
}

3 个答案:

答案 0 :(得分:5)

您已将async设为false:

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

这使它阻止。不要那样做。

但是,请注意,大多数人可以更快地键入字符,然后可以发出HTTP请求并收到响应,因此每次按键发送请求都不是一个好主意。

答案 1 :(得分:2)

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;
    }
}

答案 2 :(得分:1)

您可以使用XMLHttpRequest中的onreadystatechange-Event,只需将document.getElementById('AJAXWCtoHTML').innerHTML=http[act].responseText; 放入匿名函数中并设置事件处理程序。