readyState没有更改为4
readyState is not changing to 4
本文关键字:readyState 更新时间:2023-09-26
我正在制作一个聊天应用程序。在聊天应用程序中,有一个"发送"按钮,点击后调用这个javascript函数。
function sendmessage()
{
var message = document.getElementById('messageBox');
var currentuser = document.getElementById('username').value;
if(trim(message.value) != '' && trim(currentuser) != '')
{
params = "mode=SendAndRetrieveNew"+
"&name="+encodeURIComponent(currentuser)+
"&message="+encodeURIComponent(message.value);
message.value="";
xmlHttpGetMessages.open("POST",chaturl,true);
xmlHttpGetMessages.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttpGetMessages.onreadystatechange = sendmessages();
xmlHttpGetMessages.send(params);
}
}
这里变量xmlHttpGetMessages
是XMLHttpRequest
的对象。"chaturl
"变量中包含php文件名。下面的代码片段在该php文件中运行。
if($mode == 'SendAndRetrieveNew')
{
$name = $_POST['name'];
$message = $_POST['message'];
//$id = $_POST['id'];
if($name != '' && $message != '')
{
$chat->postMessages($name,$message);
}
}
postMessages($name,$message);
如下:
public function postMessages($name, $message)
{
$name = $this->Mysqli->real_escape_string($name);
$message = $this->Mysqli->real_escape_string($message);
$query = 'INSERT INTO chat(posted_on, user_name, message) VALUES ( NOW(), " ' . $name . ' " , " '. $message .' " )';
$result = $this->Mysqli->query($query);
}
sendmessages()
函数如下:
function sendmessages()
{
if(xmlHttpGetMessages.readyState == 4)
{
if(xmlHttpGetMessages.status = 200 || xmlHttpGetMessages.status == 304)
alert("Send the message.Check database");
else
alert("In else of inner IF");
}
else
alert("In else of outer IF "+xmlHttpGetMessages.readyState);
}
readyState
的值只从0到1变化,从最后一个alert();
可以明显看出。如何使它的值改为4.
阅读第一个答案后,我把xmlHttpGetMessages.onreadystatechange = sendmessages();
改为xmlHttpGetMessages.onreadystatechange = sendmessages
,它工作了。但是sendmessages()
中的最后一个alert()
是最初执行的,它显示readyState的值从2,3变化,最后执行内部if
。函数如何被调用3次?我知道评论里有答案,但我不明白。请帮助。我是Ajax新手。
这是不正确的:
xmlHttpGetMessages.onreadystatechange = sendmessages();
^^
()
意味着Javascript正在执行你的sendmessages
函数。这个函数没有返回任何东西,所以本质上你把onreadystatechange
回调设置为null
。
应该是
xmlHttpGetMessages.onreadystatechange = sendmessages;
^---note this
相关文章:
- Firefox Addon为什么标签页的readystate未定义
- IE9 XMLHTTPRequest请求正文不完整,但readyState=4 statuscode=200
- readyState=4三次.Ajax-由警报引起
- 使用document.readyState正确使用Selenium
- 通过PHP的标头(“内容处置:附件..”)下载文件后,将document.readyState的状态更改为“完成”
- HTML5视频readyState与事件侦听器
- 获得readyState为4和状态200加上状态文本“0”;OK”;而成功函数仍然没有;我没有接到电话
- 如何使用readyState判断XHR已发送到服务器
- 为什么我的XMLHttpRequest具有readystate 4但状态为0
- Javascript::循环,直到readyState完成
- 使用php的Ajax,获取状态200,但readyState为0
- 如何使用setTimeout每隔10毫秒检查xmlhttp.readyState
- document.readyState 在使用 karma 和 jasmine & PhantomJS 时总是“
- dos XHR的“readyState==3”是如何工作的
- AngularJS watch FileReader().readyState change
- Gmail Chrome Extension and document.readyState
- 监视/侦听 Ajax readyState
- jquery ajax readystate 0 responsetext status 0 statustext er
- readyState event for HEADERS_RECEIVED using jQuery.ajax
- xmlhttp.readyState 没有改变