gpt4 book ai didi

javascript - ReadyState 没有更改为 4

转载 作者:行者123 更新时间:2023-11-28 00:05:24 30 4
gpt4 key购买 nike

我正在制作一个聊天应用程序。在聊天应用程序中,有一个“发送”按钮,单击该按钮即可调用此 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);
}
}

此处变量xmlHttpGetMessagesXMLHttpRequest 的对象。 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它起作用了。但最后alert()来自sendmessages()最初执行,它显示 ReadyState 的值从 2,3 变化,最后变为内部 if被执行。函数如何被调用3次?我知道评论里有答案,但我不明白。请帮忙。我是 Ajax 新手。

最佳答案

这是不正确的:

    xmlHttpGetMessages.onreadystatechange = sendmessages();
^^

() 表示 Javascript 正在立即执行您的 sendmessages 函数。该函数不返回任何内容,因此本质上您将 onreadystatechange 回调设置为 null

应该是这样

    xmlHttpGetMessages.onreadystatechange = sendmessages;
^---note this

它分配 FUNCTION 本身,而不是其结果。

关于javascript - ReadyState 没有更改为 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385690/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com