Javascript 使用ajax长轮询从外部API更新页面上的响应
我有以下ajax长轮询脚本Javascript 使用ajax长轮询从外部API更新页面上的响应,javascript,php,jquery,ajax,long-polling,Javascript,Php,Jquery,Ajax,Long Polling,我有以下ajax长轮询脚本 (function poll(){ $.ajax({ url: "<?php echo URL::to('/internal/v1/checkTxn'); ?>", success: function(data){ //Update your dashboard gauge console.log(data.status); //Data is getting logged if(data.sta
(function poll(){
$.ajax({ url: "<?php echo URL::to('/internal/v1/checkTxn'); ?>", success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
}, dataType: "json", complete: poll, timeout: 1000 });
})();
流量
如果使用长轮询,可能会出现缓存问题。 首先,当你的帖子到达你的系统时,检查checkTxn是否改变。 最后,您可以在url查询中添加一个随机参数(例如,通过添加以毫秒为单位的日期),您不会使用它,但您的服务器会认为您的请求不同 请检查一下,让我们知道 @编辑:当然@Ajeesh,我会解释一下:
(function poll(){
$.ajax({ url: "<?php echo URL::to('/internal/v1/checkTxn'); ?>?_ts=" + new Date().getTime(), success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
}, dataType: "json", complete: poll, timeout: 1000 });
})();
(函数轮询(){
$.ajax({url:?\ts=“+new Date().getTime(),success:function(data){
//更新你的仪表盘仪表
console.log(data.status);//正在记录数据
如果(data.status=='success'){//,则未检查此条件
console.log('suucesful');//不来
}
},数据类型:“json”,完成:轮询,超时:1000});
})();
这样,缓存就不会被使用,因为服务器/浏览器的所有查询都是不同的
另一方面,当您收到帖子时,我会要求您对页面进行任何更改,因此,如果没有,您的ajax将永远不会收到通知,您知道我的意思吗?如果您使用长轮询,可能会出现缓存问题。 首先,当你的帖子到达你的系统时,检查checkTxn是否改变。 最后,您可以在url查询中添加一个随机参数(例如,通过添加以毫秒为单位的日期),您不会使用它,但您的服务器会认为您的请求不同 请检查一下,让我们知道 @编辑:当然@Ajeesh,我会解释一下:
(function poll(){
$.ajax({ url: "<?php echo URL::to('/internal/v1/checkTxn'); ?>?_ts=" + new Date().getTime(), success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
}, dataType: "json", complete: poll, timeout: 1000 });
})();
(函数轮询(){
$.ajax({url:?\ts=“+new Date().getTime(),success:function(data){
//更新你的仪表盘仪表
console.log(data.status);//正在记录数据
如果(data.status=='success'){//,则未检查此条件
console.log('suucesful');//不来
}
},数据类型:“json”,完成:轮询,超时:1000});
})();
这样,缓存就不会被使用,因为服务器/浏览器的所有查询都是不同的
另一方面,我要求您在收到帖子时对页面进行任何更改,因此,如果没有,您的ajax将永远不会收到通知,您知道我的意思吗?1。让我们调试一下: 设置ajax错误回调
$(function(){
(function poll(){
$.ajax({ url: "http://tinyissue.localhost.com/test.php", success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
},error:function(err){
console.info('error fired...');
console.info(err);
}, dataType: "json", complete: poll, timeout: 1000 });
})();
});
运行此命令,您将获得控制台
error fired...
Object {readyState: 4, responseText: "", status: 200, statusText: "OK"}
2。为什么转到错误回调:
为什么ajax响应status
是200而statusText
是“OK”,错误
回调仍然被触发,而不是成功
您的AJAX请求包含以下设置:
dataType: "json"
声明jQuery:
将响应计算为JSON并返回一个JavaScript对象。(...)
JSON数据被严格解析;任何格式错误的JSON都是
拒绝,并引发分析错误
这意味着,如果服务器返回状态为200OK的无效JSON,那么jQuery将启动错误函数并将textStatus参数设置为“parsererror”
解决方案:确保服务器返回有效的JSON。值得注意的是,空响应也被认为是无效的JSON;例如,您可以返回{}或null,验证为JSON
3。为什么ajax返回无效的JSON:
在您看来,在服务器端,您检查了$\u POST['status']
以确保循环轮询中的最后一次调用成功,只有设置了$\u POST['status']
,您才会回显json,否则它不会回显任何内容
但是,不幸的是,在调用循环的开始,第一次调用ajax时,您没有将状态设置为post。然后它什么也不回显,然后它进行错误
回调,也进行完成
回调,然后在没有状态
的情况下再次调用以发布。看,这是一个糟糕的循环
4。解决方案:
设置一个status
值,以便在第一次ajax调用时发布
$(function(){
(function poll(){
var status = 'success';
$.ajax({ url: "http://tinyissue.localhost.com/test.php", success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
status = data.status;
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
},error:function(err){
console.info('error fired...');
console.info(err);
status = 'error';
}, type:'post',dataType: "json", data:{status:status}, complete: poll, timeout: 1000 });
})();
});
1。让我们调试一下:
设置ajax错误回调
$(function(){
(function poll(){
$.ajax({ url: "http://tinyissue.localhost.com/test.php", success: function(data){
//Update your dashboard gauge
console.log(data.status); //Data is getting logged
if(data.status == 'success'){ //This condition is not being checked
console.log('suucesful'); //Not coming
}
},error:function(err){
console.info('error fired...');
console.info(err);
}, dataType: "json", complete: poll, timeout: 1000 });
})();
});
运行此命令,您将获得控制台
error fired...
Object {readyState: 4, responseText: "", status: 200, statusText: "OK"}
2。为什么转到错误回调:
为什么ajax响应status
是200而statusText
是“OK”,错误
回调仍然被触发,而不是成功
您的AJAX请求包含以下设置:
dataType: "json"
声明jQuery:
将响应计算为JSON并返回一个JavaScript对象。(...)
JSON数据被严格解析;任何格式错误的JSON都是
拒绝,并引发分析错误
这意味着,如果服务器返回状态为200OK的无效JSON,那么jQuery将启动错误函数并将textStatus参数设置为“parsererror”
解决方案:确保服务器返回有效的JSON。值得注意的是