0

我正在学习 Ajax,我正在学习这个例子。这是做什么的?我不明白语法variable = function(){如何将函数分配给变量?

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
4

4 回答 4

2

当 readyState 改变时,如果请求完成并且响应准备好(readyState==4)并且文档正确加载(HTTP 状态代码200= OK!),则将响应文本附加到具有 id 的元素#txtHint


onreadystatechange存储每次readyState属性更改时要自动调用的函数(或函数的名称)。

readyState保存 XMLHttpRequest 的状态。从 0 到 4 的变化:

  • 0:请求未初始化
  • 1:服务器连接建立
  • 2:收到请求
  • 3:处理请求
  • 4:请求完成,响应就绪

status接受 HTTP 响应代码:

  • 200:“好的”
  • 404页面不存在
于 2012-08-09T18:19:05.223 回答
2

我知道每个人都在说这是一个回调,但是您提出的问题可以通过将您感到困惑的内容与一些更熟悉的代码进行比较来更好地回答。

function myFunction()
{
    ...
}

所以我们知道调用myFunction()将运行该代码。

在 Javascript 中,您可以通过多种方式声明函数。这意味着:

var myFunction = function()
{
    ...
}

与上面的第一个示例完全相同。它创建一个您可以使用调用的函数myFunction()

将回调添加到您的问题中,我们可以看到

xmlhttp.onreadystatechange = function()
{
    ...
}

无非就是为对象 xmlhttp 的 onreadystatechange 属性分配一个函数并包含代码。这意味着每次 xmlhttp 对象发生状态更改时,都会调用函数中的代码。

于 2012-08-09T18:34:51.970 回答
1

我想解决这个评论:I've never been able to understand callbacks.

考虑这个类比:

您需要租用刚刚在 VHS 上放映的那部电影,所以您打电话给 Blockbuster 并询问服务员是否有副本。可悲的是,他们正忙于与成千上万试图同时租用“迷宫”的大卫鲍伊粉丝打交道,而他没有时间为你查找信息。所以相反,他要你的电话号码。在未来的某个时候,当成群结队的人离开并且他有时间时,他会查找您需要的信息,然后用您提供的号码给您回电。事实证明这部电影已经售罄,所以他建议改为“黑水晶”。

在您的情况下,您正在处理一个需要很长时间才能完成工作的实体,因为它需要与远程服务器通信,因此它本质上会询问您的电话号码,以便在完成后您会被回叫是,与请求的数据。

现在更有意义了吗?

于 2012-08-09T18:58:09.057 回答
1

onreadystatechange是一个回调。它在特定事件发生时触发。onreadystate当请求就绪状态改变时发生。

简而言之onreadystate

Stores a function (or the reference of a function) to be called automatically each time the readyState property changes

现在换行 xmlhttp.readyState==4 && xmlhttp.status==200

readyState : Holds the status of the XMLHttpRequest.

 Changes from 0 to 4: 
0: request not initialized 
1: server connection established
2: request received 
3: processing request 
4: request finished and response is ready

status保持状态

200: "OK"
404: Page not found

所以xmlhttp.readyState==4 && xmlhttp.status==200当响应准备好并且没有问题时条件为真

xmlhttp.responseText包含从服务器发送的响应。

因此document.getElementById("txtHint").innerHTML=xmlhttp.responseText;,将带有 id 的元素的 HTML 更改txtHint为收到的响应。

希望以上都是有道理的!!!

于 2012-08-09T18:27:23.830 回答