Ошибка при парсинге JSON. Ajax upload
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Ошибка при парсинге JSON. Ajax upload
Всем доброго дня! Народ, подскажите пожалуйста. Установил данное расширение для загрузки файлов (ajax). https://www.yiiframework.com/extension/ ... oad-widget
настроил согласно инструкции. при загрузке картинок получаю ошибку SyntaxError: Unexpected token < in JSON at position 0
не могу понять откуда она берется. в коде расширения ничего не менял. Подскажите пожалуйста, что за проблема?
настроил согласно инструкции. при загрузке картинок получаю ошибку SyntaxError: Unexpected token < in JSON at position 0
не могу понять откуда она берется. в коде расширения ничего не менял. Подскажите пожалуйста, что за проблема?
Re: Ошибка при парсинге JSON. Ajax upload
Не написали actionUpload() для приёма файлов из Ajax-запросов в 'url' => ['upload'].
Вот фреймворк вам и возвращает <html><body>Error 404 Not Found</body></html> вместо JSON-ответа экшена.
Вот фреймворк вам и возвращает <html><body>Error 404 Not Found</body></html> вместо JSON-ответа экшена.
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Дмитрий, это не так! В том то и дело, что написал. Хочу вывести массив отправляемых на экшн файлов. Выбрал 3 файла например, на экшн приходит лишь один, и постоянно вылазит эта ошибка. Не понимаю что не так
Код: Выделить всё
public function actionUpload()
{
echo '<pre>';
print_r( $_FILES );
echo '</pre>';
}
Код: Выделить всё
<pre>Array
(
[files] => Array
(
[name] => Array
(
[0] => Tulips.jpg
)
[type] => Array
(
[0] => image/jpeg
)
[tmp_name] => Array
(
[0] => /tmp/php2Zsxak
)
[error] => Array
(
[0] => 0
)
[size] => Array
(
[0] => 639304
)
)
)
</pre>
На сколько это правильно реализовано (почему отправляется не массив файлов, а по одной штуке, да еще и обращение к экшену дублируется в зависимости от кол-ва зугруженных файлов), ну и не ясна ошибка мне. Кто-то наверное юзал данное расширение? поделитесь пожалуйста
Re: Ошибка при парсинге JSON. Ajax upload
Действие должно возвращать JSON
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
каким образом мне это прописать? Одно дело, когда например я получаю POST данные и могу как вариант их прогнать через json_decode, а тут каким образом поступать? тут не приходят ни пост ни гет данные, все пусто и лезет эта ошибка.
Re: Ошибка при парсинге JSON. Ajax upload
return $this->asJson(['alala' => 'elele']);
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
это ясно, а как именно массив картинок получить из этого примера? Я говорю, что мне не понятно, почему на каждую картинку идет аякс запрос на экшен upload, а не за один раз.
С приминением return $this->asJson(['alala' => 'elele']);
ошибка появляется следующая Empty file upload result
как подтавить данные именно отправляемых файлов, и можно ли исключить аякс запрос на каждую картинку и передать массив за раз?*
Re: Ошибка при парсинге JSON. Ajax upload
Выберет человек через Ctrl+A у себя из папки все 100 фоток по 3 мегабайта и у вас сервер ляжет от одного запроса в 300 МБ. Поэтому по одному загружать надёжнее.espltdmh50 писал(а): ↑2019.05.30, 13:22 Я говорю, что мне не понятно, почему на каждую картинку идет аякс запрос на экшен upload, а не за один раз.
Логично, так как вам надо вернуть ответ в формате, нужном этому jQuery-плагину.espltdmh50 писал(а): ↑2019.05.30, 13:22 С приминением return $this->asJson(['alala' => 'elele']);
ошибка появляется следующая Empty file upload result
Как указано, этот компонент - всего лишь Yii-виджет для вывода jQuery-File-Upload. Так что инструкцию смотрим в Wiki плагина.
Заходим на страницу Options и видим опцию singleFileUploads. Её и переопределяем в 'clientOptions' своего кода.espltdmh50 писал(а): ↑2019.05.30, 13:22 можно ли исключить аякс запрос на каждую картинку и передать массив за раз?
Заходим на страницу Setup и видим примеры jSON-ответов, которые должен вернуть ваш экшен для POST или DELETE запроса.
Последний раз редактировалось ElisDN 2019.05.30, 14:37, всего редактировалось 4 раза.
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Дмитрий, благодарю за подробный ответ, спасибо что разъяснили. Почитаю эту инфу! Всем отозвавшимся спасибо!
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
ElisDN писал(а): ↑2019.05.30, 14:28Выберет человек через Ctrl+A у себя из папки все 100 фоток по 3 мегабайта и у вас сервер ляжет от одного запроса в 300 МБ. Поэтому по одному загружать надёжнее.espltdmh50 писал(а): ↑2019.05.30, 13:22 Я говорю, что мне не понятно, почему на каждую картинку идет аякс запрос на экшен upload, а не за один раз.
Логично, так как вам надо вернуть ответ в формате, нужном этому jQuery-плагину.espltdmh50 писал(а): ↑2019.05.30, 13:22 С приминением return $this->asJson(['alala' => 'elele']);
ошибка появляется следующая Empty file upload result
Как указано, этот компонент - всего лишь Yii-виджет для вывода jQuery-File-Upload. Так что инструкцию смотрим в Wiki плагина.
Заходим на страницу Options и видим опцию singleFileUploads. Её и переопределяем в 'clientOptions' своего кода.espltdmh50 писал(а): ↑2019.05.30, 13:22 можно ли исключить аякс запрос на каждую картинку и передать массив за раз?
Заходим на страницу Setup и видим примеры jSON-ответов, которые должен вернуть ваш экшен для POST или DELETE запроса.
Дмитрий, если правильно вас понял, сделал так:
Код: Выделить всё
<?php $form = ActiveForm::begin(); ?>
<?= JQueryFileUpload::widget([
'name' => 'files[]',
'url' => ['upload', 'someparam' => 'somevalue'], // your route for saving images,
'appearance'=>'ui', // available values: 'ui','plus' or 'basic'
'formId'=>$form->id,
'options' => [
'accept' => 'image/*'
],
'clientOptions' => [
'maxFileSize' => 2000000,
'dataType' => 'json',
'acceptFileTypes'=>new yii\web\JsExpression('/(\.|\/)(gif|jpe?g|png)$/i'),
'autoUpload' => true,
'completed' => "js:function(data){
console.log(data);
}",
]
]); ?>
<?php ActiveForm::end(); ?>
В data ничего не приходит, ошибка сохраняется.
shema.jpg
Error SyntaxError: Unexpected token A in JSON at position 0
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Еще добавил clientEvents. так хотя бы в console.log приходят данные при загрузке картинок! Но ошибка никуда не уходит. Не пойму что еще нужно сделать
Код: Выделить всё
<?php $form = ActiveForm::begin(); ?>
<?= JQueryFileUpload::widget([
'name' => 'files[]',
'url' => ['upload', 'someparam' => 'somevalue'], // your route for saving images,
'appearance'=>'ui', // available values: 'ui','plus' or 'basic'
'formId'=>$form->id,
'options' => [
'accept' => 'image/*'
],
'clientOptions' => [
'maxFileSize' => 2000000,
'dataType' => 'json',
'acceptFileTypes'=>new yii\web\JsExpression('/(\.|\/)(gif|jpe?g|png)$/i'),
'autoUpload' => true,
],
'clientEvents' => [
'add' => "function (e, data) {
console.log(data);
}",
]
]); ?>
<?php ActiveForm::end(); ?>
Re: Ошибка при парсинге JSON. Ajax upload
В Developer Tools браузера переключитесь на вкладку Network и посмотрите, что из контроллера возвращается.
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Ответ от сервера там в Response.
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Ну так замените print_r($_FILES) на return $this->asJson($_FILES)
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
забыл написать.. так пробовал уже. Сразу пишет Error Empty file upload result
Re: Ошибка при парсинге JSON. Ajax upload
Ошибки Empty file upload result не будет когда вы вернёте нужный ему JSON.
Ошибка "Unexpected token A" вываливается когда он не-JSON-ответ "Array(...)" из print_r пытается распарсить как JSON.
А так в контроллере получайте $files = UploadedFile::getInstancesByName('files'), сохраняйте в цикле и возвращайте JSON-ответ.
Ошибка "Unexpected token A" вываливается когда он не-JSON-ответ "Array(...)" из print_r пытается распарсить как JSON.
А так в контроллере получайте $files = UploadedFile::getInstancesByName('files'), сохраняйте в цикле и возвращайте JSON-ответ.
-
- Сообщения: 569
- Зарегистрирован: 2014.04.29, 19:14
Re: Ошибка при парсинге JSON. Ajax upload
Там в {"files": [...]} обёрнуто.