一个简单的ajax示例中的javascript回调函数onreadystatechange

扎克·史密斯

我正在用ajax编写本教程,但我不理解调用函数的那一行。(代码中的第6行)

// this is called from an onload event in the html body  tag
function process() {
    if (xmlHttp) {
        try {
            xmlHttp.open("GET", "hello.txt", true);
            xmlHttp.onreadystatechange = handleServerResponse; ***** THIS LINE HERE
            xmlHttp.send(null);
        } catch(e) {
            alert(e.toString());
        }
    };
}

handleServerResponse = function() {
    theD = document.getElementById('theD');

    if (xmlHttp.readyState == 1) {
        theD.innerHTML += "Status 1: server connectino established <br />";
    } else if (xmlHttp.readyState == 2) {
        theD.innerHTML += "Status 2: request recieved <br />";
    } else if (xmlHttp.readyState == 3) {
        theD.innerHTML += "Status 3: server processing task <br />";
    } else if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            try {
                text = xmlHttp.responseText;
                theD.innerHTML += 'status 4: request completed, response delievered.';
                theD.innerHTML += '<br />' + text;
            } catch(e) {
            }
        } else {
            alert("request cannont be completed by server (status 4)");
        };
    };
}

为什么不带括号来称呼它?喜欢:xmlHttp.onreadystatechange = handleServerResponse();

当我这样做时,它似乎只调用一次函数,因为它只打印出状态2。但是没有括号,当函数声明为变量时,似乎每次状态改变时都会调用该函数。为什么是这样?

另外,为什么xmlHttp.onreadystatechange属性执行多次?body标签只能加载一次,因此只能调用一次函数。为什么循环?

我肯定缺少与ajax相关的对象或javascript函数调用所缺少的东西。

除了下面的答案外,这里还很好地说明了过程函数中的“ true”和“ null”参数:http : //www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp

达林·迪米特罗夫(Darin Dimitrov)

为什么不带括号来称呼它?像:xmlHttp.onreadystatechange = handleServerResponse();

因为在此行上您未调用功能。您只是在订阅一个事件(回调),该事件稍后将由xmlHttp实例在AJAX请求从服务器获得响应时调用

调用时xmlHttp.send(null);,AJAX请求将发送到服务器进行处理。该函数立即返回,并执行下一行代码。稍后,服务器完成请求后,它将与响应主体一起向客户端返回一些状态代码。正是在那一刻,实际handleServerResponse功能将被执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一个简单的AJAX示例-Silverstripe

来自分类Dev

javascript中特定调用的所有ajax回调的一个入口点

来自分类Dev

一个简单的JavaScript示例

来自分类Dev

XHR onreadystatechange回调函数

来自分类Dev

ajax请求中的Javascript回调函数

来自分类Dev

使用简单示例了解Javascript回调

来自分类Dev

我到底如何编写一个回调函数来更改jquery的AJAX中的全局变量?

来自分类Dev

JavaScript 饼图函数和回调仅显示数据库中的最后一个元素

来自分类Dev

JavaScript:编写一个reduce函数,麻烦的是要减去值的回调函数

来自分类Dev

如何异步处理另一个ajax的beforeSend事件中的ajax回调?

来自分类Dev

如何传递一个函数作为 Node.js 中另一个函数的回调?

来自分类Dev

在Ajax回调中访问`this`,都在一个Object中

来自分类Dev

Javascript - 是一个匿名函数用作多次创建的回调吗?

来自分类Dev

回调函数示例

来自分类Dev

多个Ajax请求(带有一个回调)

来自分类Dev

多个Ajax调用,一个回调

来自分类Dev

在服务中注册一个回调函数,当服务使用 TypeScript 触发 AngularJs 中的回调时,该回调函数会被调用

来自分类Dev

创建一个回调以从函数返回数组

来自分类Dev

依次运行一个函数:回调问题

来自分类Dev

从另一个回调函数获取变量

来自分类Dev

从另一个函数NodeJS中的回调获取值

来自分类Dev

如何访问另一个函数中的回调参数?

来自分类Dev

如何从 ECMAS6 中的回调函数返回一个值

来自分类Dev

在Lua中是否可以将参数绑定到作为参数传递给另一个函数的回调函数?(JavaScript的“绑定”等效项)

来自分类Dev

Javascript,简单的回调示例未按预期工作

来自分类Dev

Javascript等到回调中触发了最后一个事件,然后再继续

来自分类Dev

JSONP ajax响应的回调位于另一个回调中,并且响应对象为空

来自分类Dev

我有一个节点异步功能示例。回调未返回预期值

来自分类Dev

将一个主题的数据放入回调函数中的动态数组中并进行一些计算

Related 相关文章

  1. 1

    一个简单的AJAX示例-Silverstripe

  2. 2

    javascript中特定调用的所有ajax回调的一个入口点

  3. 3

    一个简单的JavaScript示例

  4. 4

    XHR onreadystatechange回调函数

  5. 5

    ajax请求中的Javascript回调函数

  6. 6

    使用简单示例了解Javascript回调

  7. 7

    我到底如何编写一个回调函数来更改jquery的AJAX中的全局变量?

  8. 8

    JavaScript 饼图函数和回调仅显示数据库中的最后一个元素

  9. 9

    JavaScript:编写一个reduce函数,麻烦的是要减去值的回调函数

  10. 10

    如何异步处理另一个ajax的beforeSend事件中的ajax回调?

  11. 11

    如何传递一个函数作为 Node.js 中另一个函数的回调?

  12. 12

    在Ajax回调中访问`this`,都在一个Object中

  13. 13

    Javascript - 是一个匿名函数用作多次创建的回调吗?

  14. 14

    回调函数示例

  15. 15

    多个Ajax请求(带有一个回调)

  16. 16

    多个Ajax调用,一个回调

  17. 17

    在服务中注册一个回调函数,当服务使用 TypeScript 触发 AngularJs 中的回调时,该回调函数会被调用

  18. 18

    创建一个回调以从函数返回数组

  19. 19

    依次运行一个函数:回调问题

  20. 20

    从另一个回调函数获取变量

  21. 21

    从另一个函数NodeJS中的回调获取值

  22. 22

    如何访问另一个函数中的回调参数?

  23. 23

    如何从 ECMAS6 中的回调函数返回一个值

  24. 24

    在Lua中是否可以将参数绑定到作为参数传递给另一个函数的回调函数?(JavaScript的“绑定”等效项)

  25. 25

    Javascript,简单的回调示例未按预期工作

  26. 26

    Javascript等到回调中触发了最后一个事件,然后再继续

  27. 27

    JSONP ajax响应的回调位于另一个回调中,并且响应对象为空

  28. 28

    我有一个节点异步功能示例。回调未返回预期值

  29. 29

    将一个主题的数据放入回调函数中的动态数组中并进行一些计算

热门标签

归档