php ajax вернуть массив
Как работать с возвратом массива JQuery AJAX и PHP
У меня есть запрос jQuery ajax, например:
Обработчик processor.php установлен для возврата массива, например:
Я хочу сделать действие на стороне клиента на основе этого. Скажем, если массив [0] равен ‘b’, я хочу предупредить “привет”. Опять же, если массив [2] равен “x”, я хочу предупредить “привет” и т.д. Как я могу фильтровать элементы массива, чтобы захватить их данные?
Вам нужно будет вернуть массив, закодированный в форме json, как показано ниже.
то вы можете получить к нему доступ в javascript, преобразуя его обратно в массив/объект, например
Вы также можете перемещаться по всем элементам массива с помощью цикла for
в вашем коде он должен выглядеть примерно так:
Код PHP:
jQuery script
и в javascript создайте объект из строки json, вы можете сделать это с помощью getJSON вместо ajax
http://api.jquery.com/jQuery.getJSON/
Убедитесь, что ваш php устанавливает правильный заголовок ответа:
Я нахожу лучший способ вернуть массив из php в Ajax (jscript):
на стороне php: echo json_encode($myArray);
на стороне javascript (например, myAjax.responseText )
replyVal = JSON.parse(myAjax.responseText);
Чтобы отправить массивы в php из javascript, используйте сопоставление JSON.stringify() для отправки
и php json_decode() для получения
В вашем PHP-коде закодируйте массив как объект JSON
Затем вам нужно преобразовать объект JSON в Javascript/jQuery-совместимый объект. После этого вы можете преобразовать обратно в массив
Как вернуть массив из вызова AJAX?
Я ищу лучшее решение для создания AJAX-вызова с помощью jQuery, если PHP-файл возвращает массив и выйдет на стороне клиента как массив Javascript. Вот что я делаю:
Мой текущий метод просто слишком запутан для моего вкуса.
Я бы хотел, чтобы вы могли просто
на стороне PHP и непосредственно перевести его в массив Javascript после вызова AJAX.
Используйте JSON для передачи типов данных (массивов и объектов) между клиентом и сервером.
Как упоминал Вольфганг, вы можете дать четвертый параметр jQuery для автоматического декодирования JSON для вас.
Внутри js вы пытаетесь получить значения массива и / или ключи массива ur лучше, используя JSON.parse, как в var jsArray = JSON.parse(data) где data – это возвращаемый массив из php. строка, закодированная json, преобразуется в объект js, который теперь можно легко манипулировать.
например foo = <один: 1, два: 2, три: 3>– получил после JSON.parse
for (key in foo) < console.log("foo["+ key +"]="+ foophp ajax вернуть массив) >– печатает на консоли firebug. вуаля!
Посмотрите на json_encode (http://php.net/manual/en/function.json-encode.php). Он доступен с PHP 5.2. Используйте параметр dataType: ‘json’ чтобы он разбирался для вас. Тогда у вас будет объект как первый аргумент. Для получения дополнительной информации смотрите jQuery-документацию: http://api.jquery.com/jQuery.ajax/
Php имеет супер-сексуальную функцию для этого, просто передайте массив:
Возврат массива / объекта в скрипт jquery из AJAX
Всем привет и заранее спасибо,
Коротко говоря, я использую плагин для динамического заполнения опций выбора и пытаюсь сделать это с помощью вызова ajax, но пытаюсь получить данные в выборку, поскольку выбор создается до того, как закончится ajax.
Во-первых, у меня есть плагин, который устанавливает различные варианты выбора. options вход может принять массив или объект и создает HTML для избранных. Код createModal также настроен для обработки функции, предоставленной для options вход. Пример ниже;
То, что я пытаюсь сделать, это предоставить объект options ввод через AJAX. У меня есть плагин postFind, который координирует вызов ajax. Такие элементы, как база данных, коллекция и т. Д., Передаются в вызов ajax. Функции, которые должны быть выполнены после вызова ajax, передаются с использованием опции onSuccess.
Плагин работает нормально, так как, когда я смотрю на вывод, это данные, которые я ожидаю. Ниже приведен пример начальной попытки.
В разных итерациях попыток я смог вернуть данные в опции, но не в качестве выбора.
Любая помощь, которую вы можете оказать, будет отличной!
Обновить: Небольшая ошибка при публикации, необходимо передать результаты обратно на исходный вызов: options.onSuccess.call(this, obj);
Решение
Я считаю, что для использования переменных внутри вашего обратного вызова успешно должны быть определены свойства внутри вашего вызова ajax. Затем для доступа к свойствам используйте this внутри обратного вызова. Подобно:
Другие решения
Мне не ясно, где проблема без доступа к функциональному примеру. Я бы начал с упрощенной версии того, что вы хотите сделать, которая демонстрирует правильную функциональность. Я предполагаю, что обратные вызовы не установлены правильно; Я хотел бы увидеть стек сетевых вызовов, прежде чем сделать более определенное заявление. Несколько удачно расположенных console.log() операторы, вероятно, дадут вам лучшее представление о том, как выполняется код.
Я написал и протестировал следующий код, который устраняет большую часть сложности из ваших фрагментов. Это работает, заполняя элемент select при загрузке страницы.
Вот играть на скрипке это также демонстрирует поведение.
Как получить массив с помощью AJAX, который вызывает сценарий PHP?
Так что, в основном, я делаю автоматическое заполнение текстового поля, используя AJAX, чтобы получить информацию из скрипта PHP, который вызывает функцию C.
Вот что я нашел в теории: (Предполагая получение только одного значения)
Теперь, если это сработает, я верю, что так и будет. Если я получу массив значений, то вход внутри функции не может быть ответом, правильно? Так что мне нужно изменить, чтобы сделать его массивом?
Просто чтобы быть ясно, мой скрипт PHP использует echo вывести свою информацию. Я бы предпочел выводить в более «стандартном» виде, например, в V1 = 120, V2 = 120 и т. Д., Но PHP для меня новичок, и я сейчас его изучаю. Спасибо.
РЕДАКТИРОВАТЬ:
Просто чтобы было понятнее
Будет ли что-то вроде этой работы?
Решение
С вами echo на стороне PHP ответом может быть только строка.
Но если эта строка сформирована как допустимый JSON, вы сможете использовать ее так, как пожелаете.
Итак, на стороне PHP, убедитесь, что формат json действителен:
Затем в JS … Вы получили строку … Вы должны проанализировать ее, чтобы сделать ее массивом.
Другие решения
При обновлении OP вы можете попробовать что-то вроде этого, чтобы отобразить каждый элемент массива в соответствующее текстовое поле, которое вы можете сделать.
Это отобразит каждый индекс массива, возвращенного из конечной точки JSON, в соответствующее текстовое поле.
Если JSON, возвращаемый из вашей конечной точки, является допустимым массивом JSON, ваша переменная ответа уже должна быть массивом!
Вы можете отформатировать строку в php, чтобы она возвращала объект json, например
Отправьте ваш массив как json:
Самый простой (для меня) способ связи между JavaScript и PHP — это JSON.
Таким образом, ваш PHP-скрипт должен генерировать ответ в этом формате.
Чистее всего динамически генерировать p-элементы, потому что вы не знаете, сколько результатов ваш PHP-файл вернет вам.
Я не уверен в коде javascript, возможно, вы получили строку json, которую необходимо преобразовать в массив Javascript
Прежде чем связать ваш javascript с php-скриптом, попробуйте позвонить почтальону (или другому http-клиенту), чтобы убедиться, что ваш веб-сервис работает как обычно
Одна функция для Ajax-запросов.
Как вернуть данные.
Что же вообще это значит: «синхронное или асинхронное выполнение»? Если не особо углубляясь и, как говорится, на пальцах, то:
Надеюсь, что суть уловили. 🙂 Давайте разберем типичный ошибочный пример:
И вопрос обычно звучит в таком стиле: «Почему функция не возвращает данные? Почему всегда false?» Теперь уже, когда вы знаете разницу между синхронным и асинхронным выполнением, вы можете без труда понять, что происходит внутри функци «ajaxRequest»: инициализировали переменную «response», начался процесс ajax-запроса, но еще до его завершения, функция уже возвращает значение переменной, которое так и не успело изменится.
Теперь в любом месте, где нужно сделать ajax-запрос, мы прописываем только то, что отправляем и обработчик ответа:
Если же в каком-то исключительном случае, нам нужно изменить определенную настройку, то её так же дописываем. Например, в каком-то случае, нам не нужно показывать «loader» ( ) перед отправкой запроса или вместо loader-а, вывести что-то в консоль:
Кому-то может показаться такой подход малополезным, но представим ситуацию, когда вам нужно сделать два, три или более ajax-запросов, дождаться завершения каждого, обработать ответы и только потом вывести на экран. Любители «индусского кода» не растеряются 🙂 Они напишут тонну лишнего кода, в то время, как это можно сделать достаточно легко с помощью того же метода $.when():
Функция Ajax осталась одна, ничего лишнего писать не пришлось и результат тот, которого мы ожидали.
И напоследок, покажу, как можно использовать Promise на чистом JavaScript. Сам код Ajax-запроса я описывать тут не буду, т.к. я его уже разбирал в статье Запрос на чистом JavaScript, а схематически это будет выглядеть так: