Я много раз искал эту проблему, но безуспешно, или, может быть, я упустил проблему. Пожалуйста, передайте мне все, что я мог сделать, чтобы улучшить объяснение.
У меня есть вход «Файл», который требует Php использование файла Ajax на ‘менять’ вот так:
$(document).on('change', 'input[name="photo"]', function(){
var file = this.files[0];
var formData = new FormData();
var user = localStorage.getItem("user");
formData.append('_file', file);
formData.append('_user', user);
$.ajax({
type: "POST",
cache: false,
url: ip + "php/insert_img.php",
data: formData,
contentType: false,
processData: false,
success: function (e) {
// do something
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus, errorThrown);
}
});
});
Предполагается, что это приложение для телефонной связи, и я использую эмулятор Ripple Chrome с включенной для тестирования платформой Apache Cordova / PhoneGap.
Теперь все работает как положено при использовании localhost, и PHP печатает formData так, как должно, однако, когда я использую тот же PHP-файл, загруженный на сервер (отсюда и переменная ‘ip’ в Ajax URL вариант), это другая история.
Через некоторое время он возвращает ошибка и при проверке инструментов разработчика Chrome> вкладка «Сеть» я вижу, что «Код состояния» запроса: 503 Сервис недоступен.
НО, если я поменяю данные установка на что-либо кроме FormData (), это работает.
Похоже, проблема связана с настройками сервера, но я не знаю, в чем проблема.
Я сталкивался с этой проблемой много раз при использовании AJAX, поэтому вот мои первые мысли:
Определен ли «ip»? url: ip + «php / insert_img.php»
Также я обнаружил, что удаление некоторых дополнительных опций AJAX устранило проблему. Измененный код ниже:
$(document).on('change', 'input[name="photo"]', function(){
var file = this.files[0];
var formData = new FormData();
var user = localStorage.getItem("user");
formData.append('_file', file);
formData.append('_user', user);
$.ajax({
type: "POST",
url: ip + "php/insert_img.php",
data: formData,
success: function (e) {
// do something
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus, errorThrown);
}
});
});
Надеюсь это поможет.
———- РЕДАКТИРОВАТЬ ———-
После небольшого поиска я считаю, что проблема заключается в том, где вы добавляете _file
а также _user
данные. Если значения этих данных являются массивом, вам придется его «зачеркнуть»:
formData.append('_file', JSON.stringify(file));
formData.append('_user', JSON.stringify(user));
Других решений пока нет …