Ajax Long Poll问题(网关504)

时间:2019-03-03 02:26:09

标签: javascript jquery ajax

好的,我一直在努力寻找解决问题的方法,而我空手而归。我有一个确实有效的 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>

1 个答案:

答案 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!';
});