Как разобрать данные из php в jQuery, если получен массив и объект

PHP:

header('Content-Type: application/json');
//Some code
$files_arr['BadIMG'][$i] = $fileName;
//Some code
$files_arr['GoodIMG'][$i] = $path;
//Some code
echo json_encode($files_arr);

JS:

success: function(response) {
    console.info(response.BadIMG);
    console.info(response.GoodIMG);
    for (var i = 0; i < response.GoodIMG.length; i++) {
        var src = response.GoodIMG[i];
        $('#fast-reply_textarea').focus().val($('#fast-reply_textarea').val() + '\n[img]https://url/' + src + '[/img]\n');
    }
}

Если из PHP получено только GoodIMG, то все не так и в #fast-reply_textarea успешно добавлены ссылки на изображения:

console.info(response.BadIMG);
undefined
console.info(response.GoodIMG);
Array [ "1_Good.jpg", "2_Good.jpg" ]

Но если из PHP получены GoodIMG + BadIMG ничего не вставляется в #fast-reply_textarea:

console.info(response.BadIMG);
Array [ "1_Bad.jpg", "2_Bad.jpg" ]

console.info(response.GoodIMG);
Object { 2: "1_Good.jpg", 3: "2_Good.jpg" }

А если из PHP получил только BadIMG:

console.info(response.BadIMG);
Array [ "1_Bad.jpg", "2_Bad.jpg" ]

console.info(response.GoodIMG);
undefined //With error:
Uncaught TypeError: can't access property "length", response.GoodIMG is undefined

Как распарсить эти данные, если BadIMG получен вместе с GoodIMG и добавить ссылки GoodIMG в редакторе? Для BadIMG я добавлю предупреждение, например: From (Count all images) images (Count or Names of BadIMG) не загружены.

Я думаю, что создание $files_arr['GoodIMG'] находится на определенных условиях. Добавляйте его в каждом случае или проверяйте, определено ли оно в JS if (response.GoodIMG) { for (...).

Syscall 17.12.2020 10:54

А если GoodIMG получен вместе с BadIMG?

Erekle M. 17.12.2020 11:02

Почему бы не возвращать одну и ту же структуру во всех случаях, чтобы избежать таких проблем?

Nico Haase 17.12.2020 11:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете удалить индекс $i в своих массивах в PHP.

$files_arr['BadIMG'][] = $fileName;
$files_arr['GoodIMG'][] = $path;

В этом случае оба будут массивами, а не объектами.

Кроме того, в JS вы должны проверить, определены ли переменные или нет.

success: function(response) {
    if (typeof response.GoodIMG !== "undefined") {
        for (var i = 0; i < response.GoodIMG.length; i++) {
            var src = response.GoodIMG[i];
            $('#fast-reply_textarea').focus().val($('#fast-reply_textarea').val() + '\n[img]https://url/' + src + '[/img]\n');
        }
    }
}

Другие вопросы по теме