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) не загружены.
А если GoodIMG получен вместе с BadIMG?
Почему бы не возвращать одну и ту же структуру во всех случаях, чтобы избежать таких проблем?






Вы можете удалить индекс $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');
}
}
}
Я думаю, что создание
$files_arr['GoodIMG']находится на определенных условиях. Добавляйте его в каждом случае или проверяйте, определено ли оно в JSif (response.GoodIMG) { for (...).