好的,我一直在努力寻找解决问题的方法,而我空手而归。我有一个确实有效的 AJAX 调用(我可以看到行已添加到mySQL数据库中),但是ajax调用由于我收集的内容而超时,因为60秒钟后我在控制台中看到了以下内容:
Error: Gateway 504 timeout.
即使超时,我仍然可以看到php脚本确实仍在后台运行,并且仍在向数据库添加行。
我确实尝试增加超时时间,并且 set_time_limit(0)
仍然没有运气。我认为,基于我的机智,我需要诉诸长时间轮询。这是我修改后的javascript,试图实现长时间轮询;
$("#scan_library_submit").on('click', function(e){
var media_dir = $("#media_dir").val();
var media_ext = document.forms['scan_library_form'].elements[ 'media_ext[]' ];
if( media_dir =='' || media_ext == '' )
{
document.getElementById("scan_library_response").innerHTML = '<font color="red"><i class="fas fa-times"></i> All Fields Required.</font>';
return
}
this.innerHTML = '<i class="fa fa-spinner fa-spin"></i> Scanning...';
//ajax call to scan library
(function scan_media_library(){
setTimeout(function(){
$.ajax({
url: 'ajax/library_scan.php',
type : "POST",
dataType : 'json',
data : $('#scan_library_form').serialize(),
success : function(result) {
if(result.code === 404){
document.getElementById("scan_library_response").innerHTML = result.msg;
return;
}else if(result.code === 200) {
document.getElementById("scan_library_response").innerHTML = result.msg;
document.getElementById("scan_library_submit").innerHTML='<i class="fas fa-check"></i> Complete!';
setInterval('window.location.reload()', 9000);
return;
}else{
scan_media_library();
}}
})
}, 3000);
})();
});
我仍然收到错误网关504 ...:(
在这个问题上还有一点不足之处。我想随着脚本的运行来更新<span>
的进度;基本上,该脚本将数据添加到mysql表中,因此它可以定期对表进行ping以获取行数。可以实现吗?如果是的话...赞赏链接到适当的教程,这对我是一次学习的经验!在AJAX请求运行时,它可以每3-5秒ping表一次,以查看添加了多少行,然后刷新结果<span>
。
答案 0 :(得分:1)
我留下了我认为真正问题所在的评论,但是您也可以在ajax中设置超时时间:
$("#scan_library_submit").on('click', function (e) {
var media_dir = $("#media_dir").val();
var media_ext = document.forms['scan_library_form'].elements['media_ext[]'];
if (media_dir == '' || media_ext == '') {
document.getElementById("scan_library_response").innerHTML = '<font color="red"><i class="fas fa-times"></i> All Fields Required.</font>';
return
}
this.innerHTML = '<i class="fa fa-spinner fa-spin"></i> Scanning...';
$.ajax({
url: 'ajax/library_scan.php',
type: "POST",
dataType: 'json',
data: $('#scan_library_form').serialize(),
success: function (result) {
console.log(result);
alert(result.msg);
callback(result.code);
if (result.code === 404) {
document.getElementById("scan_library_response").innerHTML = result.msg;
return
}
else {
document.getElementById("scan_library_response").innerHTML = result.msg;
}
},
error: function (xhr, resp, text) {
console.log(xhr, resp, text);
},
timeout: 90000
})
this.innerHTML = '<i class="fas fa-check"></i> Complete!';
});