php - 如果没有 ajax readystate() 中的 alert(),循环将无法工作

标签 php ajax variables local

问题描述: 您好!

我的 XMLHTTPRequest 对象在准备好后会做一些事情。我收到的 responseText 被拆分,并作为参数发送到 myFunction()

现在,我需要调用 myFunction() 'n' 次,并将响应文本的子字符串作为参数。

这有效:

myAjaxObj.onreadystatechange=function() 
    {   
        if(myAjaxObj.readyState==4) 
        {
            if(myAjaxObj.status==200) 
                        {
                            myFunction( myAjaxObj.responseText, id )

这行不通:

myAjaxObj.onreadystatechange=function() 
    {   
        if(myAjaxObj.readyState==4) 
        {
            if(myAjaxObj.status==200) 
                        {
                            var count i=0;
                            for( i=0; i < 5; i++ )
                            {   
                                [b]alert("Without this it wont work") [/b]
                                myFunction( myAjaxObj.responseText, i );
                            }

基本上,for 循环中的代码不会运行,除非 alert() 取消注释。 我读过一些关于 javascript 闭包的文章,事实上它有点让执行/渲染同步

解决方案是什么?

最佳答案

好的,这是因为您没有轮询 onreadystatechange 函数。基本上,调用是异步的,您需要每隔几毫秒轮询一次 readyState 变量以查看它何时更改。这就是它使用 alert() 的原因 - 警报导致长时间暂停,在此期间客户端收到 AJAX 响应。在警报得到响应并且您的代码根据需要执行后检查 readyState 变量。

但是,如果没有 alert(),您的代码只会检查 readyState 变量一次

一种解决方法是通过在调用中将异步参数设置为 false 来使调用同步。这有一个缺点,即客户端将卡住,直到收到 AJAX 响应。

另一种方法是不断轮询 readyState 变量。

基本上,您不应该相信回调函数会正确执行 - 它会卡住很多次!

关于php - 如果没有 ajax readystate() 中的 alert(),循环将无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607007/

相关文章:

php - GAE - PHP session 不工作

php - 如何将自定义列添加到查询生成器中的选择?

css - 我可以跨 SCSS 文件使用变量吗?

javascript - 如何实现html的本地存储?

php - 连接 3 个表 mysql php

javascript - 需要一个可以处理实时更新的可排序 JavaScript 表

javascript - 为什么 Access-Control-Allow-Origin 在 Codeigniter Rest-Server 中不起作用

javascript - 尝试打印 json 中的关键变量

WHERE 子句中的 MySQL 变量

variables - ExtJS 4.2 - 动态加载日期选择器值 - 新手 Q