Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX调用在脚本的其余部分之后完成_Javascript_Php_Ajax - Fatal编程技术网

Javascript AJAX调用在脚本的其余部分之后完成

Javascript AJAX调用在脚本的其余部分之后完成,javascript,php,ajax,Javascript,Php,Ajax,我有一个AJAX调用,从数据库中获取列表的条目。因此,我从Ajax调用中接收数据,但它们有点“晚”,因此其余操作在必要的数据完全加载之前开始(请参见屏幕截图)。是否有办法暂停脚本,直到ajax数据完全加载,以使用所有信息?发生这种情况是因为“asynchronus=true”吗 很高兴能得到一些答案,谢谢 控制台显示以下内容: 我试图重新安排脚本,但没有什么真正改变问题 var data_array = []; var data = []; var output = document.getE

我有一个AJAX调用,从数据库中获取列表的条目。因此,我从Ajax调用中接收数据,但它们有点“晚”,因此其余操作在必要的数据完全加载之前开始(请参见屏幕截图)。是否有办法暂停脚本,直到ajax数据完全加载,以使用所有信息?发生这种情况是因为“asynchronus=true”吗

很高兴能得到一些答案,谢谢

控制台显示以下内容:

我试图重新安排脚本,但没有什么真正改变问题

var data_array = [];
var data = [];
var output = document.getElementById('entry-list');
/*Static Data Variables for Data Call*/
var name;
var priority;
var category;
var expiry;
/*Call AJAX*/
var ajax = new XMLHttpRequest();
var method = "GET";
var url = "getdata.php";
var asynchronous = true;
ajax.onreadystatechange = function()
{
    if (this.readyState == 4 && this.status == 200) {
    /*getting return --> putting/convert json into array*/data.push(JSON.parse(this.responseText));
    console.log(data.length);

        for(var a = 0; a<data.length; a++){
             name = data[a].name;
             priority = data[a].priority;
             category = data[a].category;
             expiry = data[a].expiry;
             data_array.push("<li class='' id='list-item"+a+"' onclick='itemClick(this)'>"+name+" #"+a+", "+priority+"</li>");
            console.log("Array-entry added");
        }
    }
}
ajax.open(method, url, asynchronous);
//sending
ajax.send();
//recieving asnwer from getdata.php
console.log(data_array);
output.innerHTML = data_array;   
var数据_数组=[];
var数据=[];
var output=document.getElementById('entry-list');
/*用于数据调用的静态数据变量*/
变量名;
var优先级;
var类别;
var到期;
/*调用AJAX*/
var ajax=new-XMLHttpRequest();
var method=“GET”;
var url=“getdata.php”;
var异步=真;
ajax.onreadystatechange=函数()
{
if(this.readyState==4&&this.status==200){
/*获取返回-->将json放入/转换为数组*/data.push(json.parse(this.responseText));
console.log(data.length);
对于(var a=0;a
有没有办法暂停脚本

您的想法是错误的。与其试图强制操作阻塞,不如重新构造代码以使用数据响应异步操作。基本上,从getdata.php//receiving asnwer之后的行应该在回调函数中,而不是在它之后

因此,不要像这样:

ajax.onreadystatechange = function()
{
    // the rest of your code
}
ajax.open(method, url, asynchronous);
ajax.send();
console.log(data_array);
output.innerHTML = data_array;
ajax.onreadystatechange = function()
{
    // the rest of your code

    console.log(data_array);
    output.innerHTML = data_array;
}
ajax.open(method, url, asynchronous);
ajax.send();
您可以这样做:

ajax.onreadystatechange = function()
{
    // the rest of your code
}
ajax.open(method, url, asynchronous);
ajax.send();
console.log(data_array);
output.innerHTML = data_array;
ajax.onreadystatechange = function()
{
    // the rest of your code

    console.log(data_array);
    output.innerHTML = data_array;
}
ajax.open(method, url, asynchronous);
ajax.send();
当然,您的代码可能会比这两行代码更大、更复杂。如何构造更复杂的操作取决于您自己。但问题是,这些操作应该由AJAX函数的响应处理程序调用

有没有办法暂停脚本

您的想法是错误的。与其试图强制操作阻塞,不如重新构造代码以使用数据响应异步操作。基本上,从getdata.php//receiving asnwer之后的行应该在回调函数中,而不是在它之后

因此,不要像这样:

ajax.onreadystatechange = function()
{
    // the rest of your code
}
ajax.open(method, url, asynchronous);
ajax.send();
console.log(data_array);
output.innerHTML = data_array;
ajax.onreadystatechange = function()
{
    // the rest of your code

    console.log(data_array);
    output.innerHTML = data_array;
}
ajax.open(method, url, asynchronous);
ajax.send();
您可以这样做:

ajax.onreadystatechange = function()
{
    // the rest of your code
}
ajax.open(method, url, asynchronous);
ajax.send();
console.log(data_array);
output.innerHTML = data_array;
ajax.onreadystatechange = function()
{
    // the rest of your code

    console.log(data_array);
    output.innerHTML = data_array;
}
ajax.open(method, url, asynchronous);
ajax.send();

当然,您的代码可能会比这两行代码更大、更复杂。如何构造更复杂的操作取决于您自己。但问题是,这些操作应该由AJAX函数的响应处理程序调用。

您可以通过jquery AJAX这样做

$.ajax({

            method:"POST",
            url:"URL",
            data: {name:value},
            success: function (responseText) {

              //CODE HERE RUN AFTER DATA FULLY LOADED

            }

        });

您可以通过jQueryAjax这样做

$.ajax({

            method:"POST",
            url:"URL",
            data: {name:value},
            success: function (responseText) {

              //CODE HERE RUN AFTER DATA FULLY LOADED

            }

        });

为什么我的图像不可见?你应该熟悉javascript的异步行为。谷歌这里的一些关键词是
异步
承诺
回调
生成器
为什么我的图像不可见?你应该熟悉javascript的异步行为。这里有一些关键词对于google来说,是
异步的
承诺的
回调的
生成器
,我想现在它解决了这个问题,但是我想知道为什么日志会在ajax之前回响?是因为“加载时间”还是什么原因造成的?@roubs3019:ajax中的第一个“A”代表“异步的”。该操作被调用,当网络执行其操作时,代码继续执行。当收到网络响应时,它会调用您提供的回调函数。我认为它现在解决了问题,但我想知道为什么日志会在ajax之前回显?这仅仅是因为“加载时间”吗或者是什么原因造成的?@roubs3019:AJAX中的第一个“A”代表“异步”。该操作被调用,当网络执行其操作时,代码继续执行。当收到网络响应时,它调用您提供的回调函数。