Javascript jquery每2秒从php页面获取一次数据
我每2秒从php页面获取数据。当我调用一次数据时,数据非常大,然后数据就来了,但当我将代码放入setinterval函数时,控制台中的数据就不显示了。我将此代码放入setinterval函数,因为每2秒后,我需要新的数据。请大家分享任何想法Javascript jquery每2秒从php页面获取一次数据,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我每2秒从php页面获取数据。当我调用一次数据时,数据非常大,然后数据就来了,但当我将代码放入setinterval函数时,控制台中的数据就不显示了。我将此代码放入setinterval函数,因为每2秒后,我需要新的数据。请大家分享任何想法 var data_array = ''; setInterval(function () { $.ajax({ url:"./phponline.php", async:false,
var data_array = '';
setInterval(function () {
$.ajax({
url:"./phponline.php",
async:false,
success:function(res)
{
data_array = res;
},
error:function(errorMsg)
{
}
});
}, 5000);
console.log(data_array);
您的console.log应该在成功回调中调用,或者直接在setInterval回调中的ajax调用之后调用
如果将console.log放在setInterval之后,data_数组将为空,因为它是在5秒后设置的
var data_array = '';
setInterval(function () {
$.ajax({
url:"./phponline.php",
async:false,
success:function(res)
{
data_array = res;
console.log(data_array);
},
error:function(errorMsg)
{
}
});
}, 5000);
正如Muhammed Atif在评论中所说,您需要将控制台日志放在SetInterval函数中
var data_array = '';
function handleData() {
console.log(data_array);
}
setInterval(function () {
$.ajax({
url:"./phponline.php",
async:false,
success:function(res)
{
data_array = res;
handleData();
},
error:function(errorMsg)
{
}
});
}, 5000);
您需要在setInterval的ajax success中调用一些自定义函数,以提供存储在data_数组中的响应效果:
var data_array = '';
$(document).on('ready', function(event, data) {
setInterval(function () {
$.ajax({
url:"./phponline.php",
async:false,
success:function(res)
{
data_array = res;
updateWithData();
},
error:function(errorMsg)
{
}
});
}, 5000);
updateWithData();
});
function updateWithData(){
//use data_array to make changes on each call.
}
这里有两个问题,主要是您试图进行一个同步ajax调用,这已经被弃用了。您需要以异步调用的方式来处理它 将每次获取新数据时要运行的代码放入函数中,并在成功回调中调用该函数
var data_array = ''; // this is a global variable
function getNewData() {
$.ajax({
url: "./phponline.php",
})
.done(function(res) {
data_array = res; // the global variable is updated here and accessible elsewhere
getNewDataSuccess();
})
.fail(function() {
// handle errors here
})
.always(function() {
// we've completed the call and updated the global variable, so set a timeout to make the call again
setTimeout(getNewData, 2000);
});
}
function getNewDataSuccess() {
console.log(data_array);
}
getNewData();
正如我在评论中解释的那样,将setInterval与ajax调用结合使用是一个坏主意,因为如果调用的时间长于此时间间隔,则可能会导致调用重叠。此方法进行调用,等待结果,然后使用setTimeout进行下一次调用。这样,直到最后一次调用完成后2秒,您才能进行ajax调用。Put console.logdata\u array;在成功处理程序内部。我需要数据数组外部函数@Phylogenesisbut your console.logdata\u array;不是set interval函数的一部分,我知道,但是在您当前的代码中,console.logdata\u数组;将仅第一次运行,因为它不是setInterval函数的一部分。其他人已回答了您遇到的数据似乎未更新的问题,但您还需要处理另一个问题。使用setInterval可能会导致您同时发出多个请求。如果出于任何原因,ajax调用在代码中花费的时间超过2秒或5秒,那么您将在一个请求仍处于活动状态时发出另一个请求。这将随着时间的推移而变得复杂,并使页面无响应。将ajax调用放在函数内,并使用setTimeout在ajax成功处理程序内调用函数,这样它会获取数据,然后在之后再次调用函数。我不需要设置间隔内的数据数组,我需要它globalydata数组是globaly。您的问题是,当尚未调用success且data_数组为空时访问它…我不需要设置间隔内的data_数组,我需要它全局可用。请求完成后,您只需再次运行控制台日志。当前您只运行一次。我不需要设置间隔内的数据数组我需要全局数据数组您的数据数组仅为全局数据数组,但您需要监控每个调用并根据响应触发更改。