Если вы хотите загрузить файл с помощью 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>
, если у вас есть длинный код сервера на стороне сервера, я не думаю, что он попадает в 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 в качестве обработки на стороне сервера, но если вы предоставите больше информации, я быть более точным.
На всякий случай это помогает кому-то еще:
Если вы собираетесь добавлять директиву TimeOut
, а на вашем веб-сайте используется несколько vhosts (например, один для порта 80, один для порта 443 ), то не забудьте добавить директиву в всех из них!
max_execution_time = 10080
к php.ini. До сих пор я исправлял это 5 раз в 3 браузерах с успехом. Только это позволит пользователю простаивать на странице формы сообщения в течение 3 часов (10080 секунд = 3 часа), прежде чем нажимать «Отправить» и избежать веб-страницы, не найдена ошибка? Как я уже сказал, я был доволен, но до сих пор не чувствую себя на 100%. Кроме того, Timeout 300 изменен на Timeout 10080 OK? Будет ли это превышать максимально допустимое время, и это даже понадобится, чтобы избежать проблемы, с которой я столкнулся. Спасибо за отличный ответ! – Graham 9 March 2012 в 11:32