Содержание
Поэтому я просто использую эту функцию updateData, чтобы получить значения из моего php-файла, он работает после первого интервала, но я хотел бы получить первые данные после загрузки страницы, поэтому я попытался сделать var
Перед началом интервалов, но набор данных по-прежнему не обновляется немедленно, я получаю пустой массив []
Решение
Я думаю, что ваша проблема заключается в понимании того, что AJAX не синхронизируется!
Это означает, что ваш код будет продолжать работать и не будет ждать возврата вызова AJAX. Вы можете думать о вызовах AJAX как о потоках, которые будут выполняться отдельно от вашего основного потока.
Вы мог вызов AJAX синхронизирован:
Тем не менее, это побеждает цель AJAX. Вы должны узнать, как справляются с функциями обратного вызова.
Другие решения
просто определите, загружена страница или нет, затем вызовите функцию, подобную этой. это ты хочешь?
Надеюсь, что это поможет вам.
Добавьте ваш AJAX-вызов в документ готовое время, как это
Получение данных из формы.
Серия статей "Ajax на практике"
- Основы передачи данных
- Получение данных из формы
- Загрузка файлов
- Progress Bar — индикатор процесса загрузки
- Запрос на чистом JavaScript
В прошлой статье, мы разобрали основной механизм работы метода jQuery $.ajax(). Теперь не плохо бы рассмотреть случаи из реальной практики: каким способом и откуда можно получать данные для передачи ajax-запросом.
Получение данных из формы.
Есть несколько способов получить данные из полей формы:
- Выбирать каждое поле отдельно, получая его значение. Однако, это не очень удобно, когда полей много.
- Использовать метод serialize()
- Использовать метод serializeArray()
Остановимся на двух последних и не столько на том, как получать данные (тут всё просто), а на том, как их обрабатывать на стороне сервера. Возьмем, к примеру, такую форму:
HTML (файл index.html)
И напишем такой JS-код
jQuery (файл script.js)
Теперь напишем обработчик таким образом, чтоб наглядно увидеть разницу между методами serialize() и serializeArray()
PHP-обработчик (файл handler.php)
‘; $req = ob_get_contents(); ob_end_clean(); echo json_encode($req); // вернем полученное в ответе exit; >
Итак, если мы отправим данные с использованием метода serialize(), то после завершения запроса, вместо формы, мы увидит примерно такую картину:
Теперь мы видим в каком виде передаются данные (по сути, строкой) и как выглядят они же, после обработки функцией parse_str(): мы получили ассоциативный массив, где ключами являются имена полей (атрибут name), а значениями — соответствующие данные этих полей.
Проделаем то же самое, но уже с использованием метода serializeArray(), только слегка изменим обработчик. Теперь он должен выглядеть таким образом:
‘; $req = ob_get_contents(); ob_end_clean(); echo json_encode($req); // вернем полученное в ответе exit; >
В этом случае, мы уже увидим на экране следующее:
Разница очевидна. Во втором случае, мы получаем многомерный массив данных, с которым можно сразу работать. Какой из способов выбирать — решать вам. Если говорить обо мне, то в большинстве случаев, я пользуюсь первым.
Получение данных из атрибута data-*.
Итак, это был один из наиболее часто используемых способов получения и передачи данных методом AJAX-запроса. Но рассмотрим другой случай, когда формы нет, но нам нужно откуда-то брать данные для дальнейшей их обработки. К примеру, на странице товара, есть кнопка "Добавить в корзину", по нажатию на которую, мы должны получить какую-то минимальную информацию о продукте. Конечно же, можно сделать скрытые поля формы, где эту информацию и складировать, но есть и другой подход, а именно использование собственных настраиваемых атрибутов. Имя этого атрибута, начинается с префикса data- и должен имеет как минимум один прописной символ после дефиса. Например, data-id, data-mydata, data-ajax и т.д. Вот его-то и возьмем на вооружение, тем более, что в jQuery предусмотрен метод для работы с этим атрибутом — .data().
Сделаем кнопку "Добавить в корзину", содержащюю в атрибуте data-* такие данные, как ID товара, его название и цену. Разделим эти данные запятой (можно использовать другой подходящий разделитель):
И напишем следующий JS-код:
Таким не сложным способом, без лишних "телодвижений", мы получили о товаре данные, которые можем использовать дальше: передать AJAX-запросом на сервер, записать в cookie или Local Storage и т.д. Конечно же мы не сбрасываем со счетов и обычные методы для получения данных: текстовое содержание элементов, их другие атрибуты и прочее, но с этим, я надеюсь, что сложностей возникнуть не должно 😉
В следующей части, коснёмся одной из наиболее животрепещущей темы среди новичков: загрузка файлов с помощью AJAX.
Никогда раньше не работал с ajax’ом. Сейчас нужно сделать подгрузку данных черех ajax, и тут же столкнулся с проблемой. Почитав принцип работы ajax сделал следующий код:
Отправил GET’ом значение showall на сервере подхватил его PHP.
После отработки PHP кода я генерирую шаблонную часть и передаю её обратно в блок с классом "foreach". С этим проблем нет.
Теперь вопрос: как мне в ajax ответе получить данные из PHP переменных $a,$b,$c заполненных в ходе работы скрипта. В данном случае нужно вставить содержимое переменной допустим $a в значение value
т.е. мне нужно понять как передается содержимое PHP переменных в JS для дальнейшей работы с содержимым.