Вопросы Ajax Long Poll (Gateway 504) - PullRequest
0 голосов
/ 03 марта 2019

Хорошо, я пытался найти способ решить мою проблему, и я подхожу с пустыми руками.У меня есть вызов 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, чтобы он мог периодически проверять таблицу на предмет количества строк. Возможно ли это реализовать? Если это так ...Как? Ссылки на соответствующие учебные пособия приветствуются, для меня это опыт обучения! Когда выполняется запрос AJAX, он может проверять таблицу каждые 3-5 секунд, чтобы увидеть, сколько строк добавлено, а затем обновить <span> с результатом..

1 Ответ

0 голосов
/ 03 марта 2019

Я оставил комментарий к тому, что, на мой взгляд, является реальной проблемой, но вы также можете установить время ожидания в 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!';
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...