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