【发布时间】:2020-06-20 01:21:54
【问题描述】:
我遇到了关于 Ajax 到 PHP 循环的连续问题。代码(如下)工作得很好。但是,我发现它会运行 2、3 或更长时间或根据需要运行 .. 但随后会有一个“x 分钟”的休息时间,它不会运行或产生任何日志......在一次“再次”恢复 2 之前, 3小时以上。
$.ajax({
async: false,
type: "POST",
url: ajaxURL,
dataType: 'json',
data: {functionname: 'conditionTrade', arguments: [c_piars, c_timeframes, usd_amount ,stop_loss, stop_loss_min, stop_loss_max]},
// post to php and check condition
success: function (data) {
if( !('error' in data) ) {
var results = data["result"];
if (results) {
$( "#tradelog" ).load( "tradelog.html" ); // <--- produce a log
var pft = c_piars+"profitloss.txt";
$( "#profit" ).load( pft );
checkCondition();
// recursion call to this same method ie. check again
}
else {
console.log(data.error);
}
var objDiv = document.getElementById("tradelog");
objDiv.scrollTop = objDiv.scrollHeight;
}},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error[refresh]: " + textStatus);
console.log(jqXHR);
checkCondition();
// recursion call to this same method ie. check again
},
});
请有人建议为什么这个循环会随机中断,然后自行继续。 该循环旨在检索烛台数据(大约每 5 秒),然后执行一些技术分析检查,最后......输出是否找到 TA 条件的日志。代码运行良好。 但是,就好像当我不在浏览器页面上时,它可能会随机停止工作 15 分钟或随机时间,然后再自行恢复。 (因此我可能会进行 2、3、4、5 小时的连续检查,然后随机退出 30 分钟到 2 小时,然后再恢复 x 小时的检查)。我错过了什么?我已经研究过使用不同的浏览器、浏览器资源、互联网连接、php 超时等,但这个真的让人头疼。如果你能帮忙,谢谢。
附言。在以前的版本中,我曾经使用 ajaxsettimeout (5000) 循环方法,而不是显示的“对同一方法的递归调用”。这实际上会整夜运行而不会退出 - 但我发现它会不时地自行比赛,而不是等待前一个循环完成。因此,我可能会为同一个循环找到 2 或 3 个日志条目。我怎样才能稳定这个循环以按我的意愿执行?谢谢。
【问题讨论】:
-
您可以通过使用浏览器的 Web 开发人员调试工具和查看网络选项卡来获得良好的洞察力。 ajax 调用是否按预期完成?可能他们正在挂断并且没有完成?一般来说,很难持续提供快速变化的数据,例如像这样的蜡烛。如果你能找到一个提供数据流而不是基于 http get 的拉取的替代数据提供者,从长远来看,你会做得更好。
-
尝试将代码减少到仅显示问题的最小值。这可能有助于您理解它。
-
谢谢詹姆斯克拉克。。当我之前查看网络选项卡时,它非常“拥挤”,正如您所期望的那样,每 5 秒打一次电话......并写入 .log 和利润/丢失文件。我注意到大多数状态调用都是“200”,但是也存在积压的状态:“待处理”请求。是否有一种解决方法可以消除待处理的请求并在此过程中释放浏览器资源?
-
我完全接受寻找流/减少代码的建议...但是我已经尝试 php 开发 1 年,这是我的项目最终遇到的唯一问题。我会说它已经完成了 90% - 所以基本上我拒绝从头开始使用新架构,如果可以的话。
-
好的,谢谢大家。我会尝试以某种方式检查日志输出之间的 php - timeDiff() .. 并重新启动机器人。