0

我正在处理onkeydown事件以获取写入值(在文本区域中),在 PHP 文件上处理它(通过 Ajax 帖子传递它)并在外部 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;
}
4

3 回答 3

5

您已设置async为 false:

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

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

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

于 2012-08-09T13:31:05.780 回答
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;
    }
}
于 2012-08-09T13:33:06.743 回答
1

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

于 2012-08-09T13:32:21.340 回答