Веб-сервер останавливает загрузку во время длительного вызова API (никогда не показывает возврат) [дубликат]

Если вы хотите загрузить файл с помощью AJAX, вот код, который вы можете использовать для загрузки файла.

$(document).ready(function() {
    var options = { 
                beforeSubmit:  showRequest,
        success:       showResponse,
        dataType: 'json' 
        }; 
    $('body').delegate('#image','change', function(){
        $('#upload').ajaxForm(options).submit();        
    }); 
});     
function showRequest(formData, jqForm, options) { 
    $("#validation-errors").hide().empty();
    $("#output").css('display','none');
    return true; 
} 
function showResponse(response, statusText, xhr, $form)  { 
    if(response.success == false)
    {
        var arr = response.errors;
        $.each(arr, function(index, value)
        {
            if (value.length != 0)
            {
                $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
            }
        });
        $("#validation-errors").show();
    } else {
         $("#output").html("<img src='"+response.file+"' />");
         $("#output").css('display','block');
    }
}

Вот HTML для загрузки файла

<form class="form-horizontal" id="upload" enctype="multipart/form-data" method="post" action="upload/image'" autocomplete="off">
    <input type="file" name="image" id="image" /> 
</form>
28
задан Graham 9 March 2012 в 11:40
поделиться

2 ответа

, если у вас есть длинный код сервера на стороне сервера, я не думаю, что он попадает в 404, как вы сказали («он попадает на страницу с веб-страницей, не найденной»)

Браузер должен сообщить запрос

Вы можете сделать 2 вещи:

Исходя из времени ожидания увеличения количества движков CGI / Server

PHP: http: // www .php.net / manual / en / info.configuration.php # ini.max-execute-time - по умолчанию 30 секунд

В php.ini:

max_execution_time 60

Увеличьте время ожидания apache

http://httpd.apache.org/docs/2.0/mod/core.html#timeout - по умолчанию 300

В вашем httpd.conf (в конфигурации сервера или конфигурации vhost)

TimeOut 600

Обратите внимание, что первый параметр позволяет вашему скрипту PHP работать дольше, он не будет мешать сетевому таймауту .

Вторая настройка изменяет максимальное время, в течение которого сервер будет ожидать определенные события перед сбоем запроса

Извините, я не уверен, что вы используете PHP в качестве обработки на стороне сервера, но если вы предоставите больше информации, я быть более точным.

50
ответ дан rkosegi 21 August 2018 в 14:08
поделиться
  • 1
    Это PHP. Я применил max_execution_time = 10080 к php.ini. До сих пор я исправлял это 5 раз в 3 браузерах с успехом. Только это позволит пользователю простаивать на странице формы сообщения в течение 3 часов (10080 секунд = 3 часа), прежде чем нажимать «Отправить» и избежать веб-страницы, не найдена ошибка? Как я уже сказал, я был доволен, но до сих пор не чувствую себя на 100%. Кроме того, Timeout 300 изменен на Timeout 10080 OK? Будет ли это превышать максимально допустимое время, и это даже понадобится, чтобы избежать проблемы, с которой я столкнулся. Спасибо за отличный ответ! – Graham 9 March 2012 в 11:32
  • 2
    Как я уже сказал, ваш apache httpd.conf влияет на тайм-ауты, связанные с сетью, а настройки php.ini устанавливают максимальный период времени, для которого разрешен запуск сценария. – rkosegi 9 March 2012 в 11:45
  • 3
    Где в httpd.conf мы помещаем TimeOut 600? Эта линия еще не существует в моей. Это происходит в блоке «DirectoryIndex» или в блоке «Directory» или где-то еще? – covfefe 9 November 2015 в 22:31
  • 4
    @ user3004041: Вы читали ссылку выше о директиве TimeOut? он переходит в конфигурацию сервера или виртуальный хост. Настройки подключения к каталогу не имеют никакого смысла. – rkosegi 10 November 2015 в 08:02

На всякий случай это помогает кому-то еще:

Если вы собираетесь добавлять директиву TimeOut, а на вашем веб-сайте используется несколько vhosts (например, один для порта 80, один для порта 443 ), то не забудьте добавить директиву в всех из них!

0
ответ дан Nate 21 August 2018 в 14:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: