1

我是 Ajax 的新手,更糟糕的是,我也是一个 Javascript 菜鸟,我已经发布了一个聊天脚本的波纹管代码,用于实时从数据库中检索文本,并且代码正在运行,但我需要了解某些请求的全部内容。

<script>

function retrieve(){

    var xmlhttp;

    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest(); }
        else if(window.ActiveXObject) {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
        else {
            alert('Please update your browser to start chatting');
    }

简单地说,我明白上面是(我创建它)只是一个声明为分配是否 XMLHttpRequest/ActiveXObject 对象的全局变量的函数,这取决于浏览器是否为 IE6,7 和其他如果不引发警报...

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

同样,我假设上面的内容获取 onreadystatechange了 Ajax API 的属性并检查它的状态,readyState如果status它们匹配 4 和 200 意味着,Ajax 正在按需要工作

t = setTimeout("retrieve()", 2000);

我知道这setTimeout()有点像setInterval()函数,它每 2 秒在其中运行一次函数,以检查新消息。

xmlhttp.open("GET", "getajax.php", true);
    xmlhttp.send();

现在,问题出在上面,我几乎可以理解该.open方法应该从中获取数据,getajax.php尽管我不知道true在这种情况下是什么意思,但据我所知,xmlhttp.send();我完全不知道,

所以,我只需要你简单地向我解释一下我在 illaboration 中错过了什么,以及最后的查询是什么意思。

  }
    retrieve();

</script>

<div id="canvas"></div>
4

2 回答 2

2
xmlhttp.open("GET", "getajax.php", true);
xmlhttp.send();

true是告诉请求以A同步执行的内容,即 AJAX 中的A。然后最终.send()实际发送请求。

异步请求是非阻塞的,这意味着您的其余代码不会等待它们完成并在继续之前返回。这就是为什么您在通过xmlhttp.onreadystatechange. 这样,一旦请求完成,您就已经告诉您的脚本如何处理返回的信息。

希望这可以帮助。

编辑此外,我建议使用某种框架或库来处理jQuery之类的 javascript 。虽然学习一些 javascript 核心是件好事,但像 jQuery 这样的东西会让你的生活更轻松。

于 2013-05-17T00:10:54.207 回答
2

简单地说,我明白上面是(我创建它)只是一个声明分配全局变量的函数

xmlhttp不是全球性的。它是全局函数中的局部变量retrieve

类似地,上面我假设采用 Ajax API 的 onreadystatechange 属性并检查它的状态

onreadystatechange是一个接受函数的属性。该函数在值readyState更改时运行。该函数通常用于检查请求的状态。

我知道 setTimeout() 有点像 setInterval() 函数,它每 2 秒在其中运行一次函数,以检查新消息。

setTimeout在某种意义上就像setInterval它在以后运行一个函数。与 不同setInterval的是,它只运行代码一次。此外,这不是运行计时器的正确方法。这是一篇解释如何正确使用计时器的帖子

.open 方法应该从 getajax.php 获取数据,尽管我不知道 true 在这种情况下意味着什么,但就 xmlhttp.send(); 我完全不知道

通过open接受来构建您的请求:

  • 请求类型(GET/POST)

  • 您希望发送请求的 url

  • 第三个参数确定请求是否是异步的。

    • 如果设置为false,这会使请求同步。浏览器将冻结并等待响应。

    • 如果true,请求我们是异步的。浏览器不会在等待中冻结。

    默认值为true,因此您可以省略它。

send是最终将请求发送到服务器的实际功能。

为了进一步阅读,我建议你阅读MDN 关于 AJAX 的部分

于 2013-05-17T00:17:13.167 回答