php - AJAX 功能在没有警报的情况下不起作用

标签 php javascript ajax xmlhttprequest

我在我的网站中使用大量 AJAX 和 XML Http 请求。对于看似随机的几个 AJAX 调用,我无法让 onreadystatechange 函数中的所有 javascript 正确执行,除非我有一个警报调用,我猜测暂停执行足以让它完成运行 PHP 脚本服务器。这是我正在谈论的示例:

Javascript

xmlHttp=getXMLHttp();   //function returns an xmlhttp object to use
//get parameters ready
param="id=5"
xmlHttp.onreadystatechange=function(){
    if(xmlHttp.readyState==4){
        s=xmlHttp.responseText;
        var myJson = eval("("+s+")");
        document.getElementById('Elem1').value=myJson.Result1;
        document.getElementById('Elem2').value=myJson.Result2;
        triggerEvent(document.getElementById('Elem3'),'onblur');
        document.getElementById('Elem4').value=myJson.Result3;
        document.getElementById('Elem5').value=myJson.Result4
        var sel = document.getElementById('Elem6');
        var i;
        for(i=0;i<sel.length;++i){
            if(sel.options[i].value==myJson.Result5){
                sel.selectedIndex = i;
                break;
            }
        }
        document.getElementById('MfgCustNum').value=myJson.Result6;
        document.getElementById('MfgOrderNum').value=myJson.Result7;
        document.getElementById('OrderDatePicker').value=myJson.Result8;
        document.getElementById('ShipDatePicker').value=myJson.Result9;
        document.getElementById('CancelDatePicker').value=myJson.Result10;
        document.getElementById('PO Number').value=myJson.Result11;
        //for some reason, the following 2 lines are where I'm having issues without an alert box
 document.getElementById('NewElement').value=myJson.Result12;
     document.getElementById('NewElement2').value=myJson.Result13;
 //everything else loads properly
        sel = document.getElementById('SelectBox1')
        for(i=0;i<sel.length;++i){
            if(sel.options[i].value==myJson.Result14){
                sel.selectedIndex = i;
                break;
            }
        }
        sel = document.getElementById('SelectBox2')
        for(i=0;i<sel.length;++i){
            if(sel.options[i].value==myJson.Result15){
                sel.selectedIndex = i;
                break;
            }
        }
        sel = document.getElementById('SelectBox3')
        for(i=0;i<sel.length;++i){
            if(sel.options[i].value==myJson.Result16){
                sel.selectedIndex = i;
                break;
            }
        }
        sel = document.getElementById('SelectBox4')
        for(i=0;i<sel.length;++i){
            if(sel.options[i].value==myJson.Result17){
                sel.selectedIndex = i;
                break;
            }
        }
    }
}
xmlHttp.open("POST","../ServerCall.php",true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send(params);

我正在运行的 PHP 脚本是对数据库的简单查询,它被回显为 JSON 数组

    $dc->connect();
    $query = "SELECT COLUMNS FROM TABLE"
    $res = $dc->queryDb($query);
    if(!$res){
        exit();
    }
    $ary = $dc->resultsToArray($res);
    $JSON_ARRAY=array();
    foreach($ary[0] as $key=>$value){
        if(!is_numeric($key))
            $JSON_ARRAY[$key]=$value;
    }
    echo json_encode($JSON_ARRAY);

这对我来说已经成为一个相当大的问题,因为它现在发生在我的代码的 3 或 4 个不同部分,但是放入一个带有响应文本的警告对话框显示一切都在正常运行。我试过同步而不是异步运行 AJAX 调用,但它没有帮助。我也尝试过使用 settimeout 将代码运行延迟一两秒,但我的结果好坏参半,我宁愿不必为脚本运行设置特定的延迟。

编辑: 回答评论中的一些问题: 对于此代码片段,问题出在以下两行:

 document.getElementById('NewElement').value=myJson.Result12;
 document.getElementById('NewElement2').value=myJson.Result13;

如果我在该行之前放置一个警告框以获取 myJson.Result12 的文本,这些元素将在我的页面上正确填充。没有它,它们将留空并且在 Firefox 的错误控制台中看不到任何错误

这段代码是通过点击运行的。我正在使用 DataTables,当有人双击我表中的一行时,页面会填充内容。同样,除了我今天早些时候添加的 2 个新元素外,一切都运行良好。更大的担忧是这似乎是我的代码中反复出现的问题。

此外,我已经尝试过 jQuery 的 AJAX 调用,但运气不佳,我的大部分代码已经使用 xmlHttp 和 JS 编写。

最佳答案

一个可能的原因;

您应该从 onload 处理程序执行 AJAX 请求,否则在您收到响应时您的页面可能尚未完全加载。如果在您尝试更新 NewElement 和 NewElement2 时未加载它们,您的脚本将无法运行。

警报将延迟脚本足以让页面完成加载,允许元素在脚本到达该点之前存在。

关于php - AJAX 功能在没有警报的情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163307/

相关文章:

javascript - 按模型 ID 列表获取 Backbone 集合

javascript - 如何在 Bootstrap React Table 中特定列下的每一行中添加按钮?

javascript - Axios 400 错误请求调用 then 而不是 catch

PHP 国际国家代码 2 个字符到国家名称

php - 数据不显示

javascript - 悬停时将 flex 子级扩展到全宽

javascript - 在 AJAX Success 中超时 HTML 标记

php - 按 id mysql/php 出现的最高次数对数据库表进行排序

php - Active Collab SSL 相关错误

javascript - jquery sleep 未在 ajax 请求上执行