Запрос на загрузку файла AJAX не завершитсяJquery

Программирование на jquery
Ответить
Anonymous
 Запрос на загрузку файла AJAX не завершится

Сообщение Anonymous »

Я пытаюсь загрузить изображение на сервер, но запрос не завершается. В DevTools запрос отображается как ожидающий, в то время как на бэкэнде php постоянно записывает в постоянно растущий файл, пока мне не придется перезапустить Apache, чтобы остановить запрос.
Я использую CodeIgniter на бэкэнде для обработки загрузок. Точно такой же код, который используется в других частях моего кода, работает нормально.
Это код запроса. Событие прикрепляется к полю ввода файла:

Код: Выделить всё

$("body").on("change", "#product-image", function(e) {
if ($.inArray($(this).val().split('.').pop().toLowerCase(), allowedExt) == -1) {
alert("JPG JPEG PNG only");
$(this).val(null);
} else {
var formData = new FormData();
var file = $(this)[0].files[0];
formData.append("Image", file);
formData.append("ProductID", );
$.ajax({
url: "/rest/private/product/image/upload",
method: "POST",
data: formData,
processData: false,
contentType: false,
cache: false,
success: function(response) {
var resp = JSON.parse(response);
if (resp.Status == 1) {
var url = resp.Data.URL;
var order = resp.Data.Order;
var ID = resp.Data.ID;
self.showPreview("" + url, order, ID);
} else {
self.errorToast(resp.Error.Image);
}
},
error: function(resp) {
self.errorToast("Error");
},
});
}
});
Это код, который обрабатывает загрузку:

Код: Выделить всё

$Image = $this->request->getFile("Image");

$maxW = "5000";
$maxH = "5000";
$maxSize = 4;
$validationRule = [
"Image" => [
'label' => 'Your Image',
'rules' => [
'uploaded[Image]',
'is_image[Image]',
'mime_in[Image,image/jpg,image/jpeg,image/gif,image/png,image/webp,image/bmp,image/tiff]',
'max_size[Image,' . $maxSize * 1024 . ']',
'max_dims[Image,' . $maxW . "," . $maxH . ']',
],
'errors' => [
'max_dims' => '{field} is bigger than (' . $maxW . "x" . $maxH . ')',
'max_size' => '{field} is bigger than ' . $maxSize . 'MB',
],
],
];

if (!$this->validateData(["Image" => $Image], $validationRule)) {
$this->resp["Status"] = 0;
$this->resp["Error"] = $this->validator->getErrors();
return;
}

if ($Image->isValid() && !$Image->hasMoved()) {
$imageName = $Image->getRandomName();
$Image->move(ROOTPATH . 'public/uploads/product/', $imageName);
}
Проверка работает нормально. Когда код доходит до последней строки, он просто не перестает писать. Файл, загружаемый в файл продукта, становится все больше и больше. Я в тупике.
Вот заголовки запросов, отображаемые в DevTools:

Код: Выделить всё

accept
*/*
accept-encoding
gzip, deflate
accept-language
en-US,en;q=0.9
connection
keep-alive
content-length
2654
content-type
multipart/form-data; boundary=----WebKitFormBoundarytNw7RBAAwBNUVCzh
cookie
debug-bar-theme=dark; debug-bar-position=bottom; web_session=doohnklgajb7g24mm4k036juj7jc0fd8; debug-bar-state=minimized
dnt
1
host
test.local
origin
http://test.local
referer
http://test.local/p/edit/46
user-agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
x-requested-with
XMLHttpRequest
Вес конкретного файла, который я пытался загрузить, составляет всего 2,3 КБ.
Полезная нагрузка в DevTools:

Код: Выделить всё

------WebKitFormBoundarytNw7RBAAwBNUVCzh
Content-Disposition: form-data; name="Image"; filename="download (1).jpg"
Content-Type: image/jpeg

------WebKitFormBoundarytNw7RBAAwBNUVCzh
Content-Disposition: form-data; name="ProductID"

46
------WebKitFormBoundarytNw7RBAAwBNUVCzh--
Пыталась явно изменить contentType в запросе на multipart/form-data, запрос завершился, но файл не был загружен.


Подробнее здесь: https://stackoverflow.com/questions/797 ... ll-not-end
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»