5 примеров использования jquery для ajax
Содержание:
- AJAX пример №1 (Начало работы)
- Использование вспомогательных методов для работы с конкретными типами данных
- Запрос html-данных с помощью функции Load
- 4 Nothing is working!!
- jQuery $.get() and $.post() Methods
- Создание асинхронного AJAX запроса (метод GET)
- 4. PHP
- Отлавливаем баги, PHP ошибки
- jQuery синтаксис:
- Получение json-данных с помощью getJSON
- Продвинутые настройки
- Отправка формы со всеми данными ajax-запросом через jQuery
- HTTP-заголовки
- 5. JavaScript
- Рассмотрим примеры AJAX запросов:
AJAX пример №1 (Начало работы)
Приведенный ниже пример, позволит вам понять суть рассматриваемой нами технологии, и двигаться дальше к изучению более сложных примеров.
Исходный код HTML документа:
script type = «text/javascript» > function startAjax ( url ) < var request ; if ( window. XMLHttpRequest ) < request = new XMLHttpRequest ( ) ; > else if ( window. ActiveXObject ) < request = new ActiveXObject ( «Microsoft.XMLHTTP» ) ; > else < return ; >
request. onreadystatechange = function ( ) < switch ( request. readyState ) < case 1 : print_console ( «1: Подготовка к отправке. » ) ; break case 2 : print_console ( «2: Отправлен. » ) ; break case 3 : print_console ( «3: Идет обмен..» ) ; break case 4 : < if ( request. status == 200 ) < print_console ( «4: Обмен завершен.» ) ; document. getElementById ( «printResult» ) . innerHTML = «» + request. responseText + «» ; > else if ( request. status == 404 ) < alert ( «Ошибка: запрашиваемый скрипт не найден!» ) ; > else alert ( «Ошибка: сервер вернул статус: » + request. status ) ;
break > > > request. open ( ‘GET’ , url , true ) ; request. send ( » ) ; > function print_console ( text ) < document. getElementById ( «console» ) . innerHTML += text ; > script >
В коде HTML страницы мы создаем функцию startAjax() на языке JavaScript, позволяющую реализовать задуманные действия с AJAX’ом. Кстати, о действиях, во-первых мы хотим увидеть, как отрабатывает php скрипт, находящийся на сервере. Во-вторых, как возвращенная им информация появляется на страничке, без перезагрузки. Для этого в коде мы предусмотрели ссылку, по нажатию на которую запустится процесс всей демонстрации, консоль вывода действий JavaScript скрипта, а также блок для вывода результата.
Так вот, вернемся к создаваемой нами функции startAjax(), по строчкам я все описывать не стану, выделю лишь основные моменты, требуемые для представления происходящего.
- Создаем объект XMLHttpRequest позволяющий получать данные с сервера в фоновом режиме.
- Если используется IE (Браузер — Internet Explorer) тогда вместо вышеупомянутого объекта XMLHttpRequest, создаем объект ActiveXObject, смысл у них единый, отличие только в индивидуальности для IE.
- Обрабатываем все 4-ре статуса состояния запроса. Созданный запрос он же объект request, в процессе отправкиполучения данных может принимать четыре состояния (1 — подготовка к отправке, 2 — отправлен, 3 — идет обмен, 4 — получен ответ.)
- В случае 4-го статуса, при получении ответа от сервера, происходит проверка на тип ответа 200 — «OK» или 404 — «Not Found».
- Событие request.open() — открывает соединение с сервером с указанием метода передачи данных, адресом запроса, и флагом асинхронности. Указав флаг как false, мы получим в результате обычную перезагрузку страницы.
Кликнув на ссылку, мы пронаблюдаем успешное выполнение простого AJAX запроса.
Разумеется, такое сообщение мы получим только после того как разместим на сервере, в той же папке, что и саму html страничку, скрипт handler_script.php:
Скрипт не мудрый, тем не менее, его содержимого достаточно для демонстрации.
Ну вот, с азами разобрались, перейдем от простого к сложному. Рассмотрим пример использования технологии AJAX по прямому её назначению, а именно с пересылкой данных в виде XML.
Использование вспомогательных методов для работы с конкретными типами данных
Библиотека jQuery предоставляет три вспомогательных метода, которые делают работу с некоторыми типами данных более удобной. Некоторые из них мы рассмотрим далее.
Получение HTML-фрагментов
Метод load() предназначен для получения только HTML-данных, что позволяет совместить запрос HTML-фрагмента, обработку ответа от сервера для создания набора элементов и вставку этих элементов в документ в одном действии. Пример использования метода load() представлен ниже:
В этом сценарии мы вызываем метод load() для элемента, в который хотим вставить новые элементы, и передаем ему URL-адрес в качестве аргумента. Если запрос завершается успешно, а полученный от сервера ответ содержит действительный HTML-фрагмент, элементы вставляются в указанное место в документе, как показано на рисунке:
Вы видите, что все элементы из файла flowers.html добавлены в документ, как мы и хотели, но поскольку у них отсутствует атрибут class, то они не укладываются в табличную компоновку страницы, используемую в основном документе. Поэтому метод load() наиболее полезен в тех случаях, когда все элементы могут быть вставлены в одно место в документе без какой-либо дополнительной обработки.
Получение и выполнение сценариев
Метод getScript() загружает файл JavaScript, а затем выполняет содержащиеся в нем инструкции. Чтобы продемонстрировать работу этого метода, я создал файл myscript.js и сохранил его вместе с файлом test.html на своем веб-сервере. Содержимое этого файла представлено в примере ниже:
Эти инструкции генерируют три ряда элементов, описывающих цветы. Мы обошлись здесь без определения шаблонов и использовали циклы для генерации элементов (хотя, вообще говоря, следовало бы воспользоваться шаблонами данных).
Самое важное, что необходимо знать при работе со сценариям, — между инициализацией Ajax-запроса и выполнением инструкций сценария состояние документа может измениться. В примере ниже приведен сценарий из основного документа, в котором по-прежнему используется метод getScript(), но при этом, еще до завершения Ajax-запроса, модифицируется дерево DOM:. Здесь мы вызываем метод getScript() для основной функции $() и передаем ему в качестве аргумента URL-адрес файла, который хотим использовать
Если сервер способен предоставить указанный файл и этот файл содержит действительный JavaScript-код, то последний будет выполнен
Здесь мы вызываем метод getScript() для основной функции $() и передаем ему в качестве аргумента URL-адрес файла, который хотим использовать. Если сервер способен предоставить указанный файл и этот файл содержит действительный JavaScript-код, то последний будет выполнен.
Метод getScript() можно использовать для загрузки любых сценариев, но особенно полезно использовать его для загрузки и выполнения таких сценариев, как сценарии для отслеживания статистики посещения сайтов или определения географического местоположения клиента, которые не связаны с поддержкой основной функциональности веб-приложения. Пользователя не особенно заботит, в состоянии ли мы точно определять его местоположение для ведения статистики, тогда как длительное ожидание загрузки и выполнения сценария будет действовать ему на нервы.
Используя метод getScript(), можно быстро получать запрашиваемую информацию, не доставляя пользователям неудобств, вызванных необходимостью ожидания ответа. Уточню свою мысль. Я вовсе не предлагаю вам использовать этот метод для выполнения каких-либо действий скрытно от пользователя и говорю лишь о том, что следует отодвигать на второй план загрузку и выполнение вполне законной функциональности, если она представляет для пользователей меньшую ценность, чем затрачиваемое на ее ожидание время.
В данном примере после запуска Ajax-запроса с помощью метода getScript() из документа удаляется элемент row2, для чего используется метод remove(). Данный элемент используется в файле myscript.js для вставки новых элементов. Эти элементы отбрасываются незаметным для пользователя образом, поскольку в документе селектору #row2 ничто не соответствует. Итоговый результат представлен на рисунке:
Отнеситесь к этому примеру как к одному из образцов надежного дизайна для ситуаций, в которых документ подвергается изменениям. Во всяком случае запомните, что при написании внешних сценариев JavaScript не стоит делать слишком много допущений о состоянии документа.
Получение данных в формате JSON
Для загрузки данных JSON с сервера предназначен метод getJSON(). Возможно, это наименее полезный из всех трех вспомогательных методов, поскольку он не делает с данными ничего сверх того, что делает базовый метод get().
Запрос html-данных с помощью функции Load
Это самый простой ajax-запрос через jQuery с получением html-данных и их вставкой в dom-элемент с id=»result» (содержимое элемента заменяется):
$('#result').load('<url-адрес>');
Более продвинутый вариант использования load:
$('#result').load('<url-адрес>', {par1:val1, par2:val2, ...}, function(response, status, xhr) { if (status == 'success') { alert('Готово'); } else { alert('Ошибка: ' + xhr.status + ' ' + xhr.statusText); } });
В этом примере серверу так же передаются параметры, а после получения ответа проверяется не было ли ошибки (например, ответ от сервера не был получен) и выполнение различных действий.
4 Nothing is working!!
When everything looks fine and your form still doesn’t work, trying to solve the problem can get very aggravating, very quickly. Here are some common issues along with their fixes.
4.1 Getting HTTP 400 or 500 errors
Your JavaScript is fine, but there’s a problem with the server handling your AJAX request. Check the specific request in the Network tab of your developer toolbar to see what’s going on. Pay close attention to your request Content-Type and the data you sent. For Firebug, it’s labeled «Source» under the Post tab for the request. Also pay attention to the HTTP status code and any error messages; some developer toolbars will color requests with HTTP status codes of 400 or 500 in red to denote that something went wrong on the server side.
4.2 JavaScript errors
Sometimes nothing is working because you have a JavaScript error. These are easy to figure out — just look at your Console tab. The error will be there along with the filename and line number.
4.3 Everything looks fine and it still doesn’t work!
This could be one of several issues, but the most common problems are logic errors and typos. Check to make sure that you’ve used the right selectors in your jQuery, that your HTML is valid, and that you haven’t mistakenly introduced a typo in your HTML or JavaScript. If you’re loading JavaScript from an external file, make sure it’s getting loaded into the browser. Double check the URL path.
4.4 Feeling rejected? Your AJAX request probably is.
If you’re trying to POST, looks fine, and you know the server-side code works, double check to see if is pointing to a domain that’s different from the domain that the JavaScript is loaded from. This also applies if you’re trying to make an AJAX POST from the, but your page is non-secure (http://) and you’re trying to load it from the secure site (https://) and vice-versa.
These limitations are in place for security reasons. They all fall under the «Same-Origin Policy», and unless cross-domain scripting is explicitly enabled in the browser or on the web server, you can only make AJAX calls from the same domain as the JavaScript. There are workarounds available, though.
jQuery $.get() and $.post() Methods
The jQuery’s and methods provide simple tools to send and retrieve data asynchronously from a web server. Both the methods are pretty much identical, apart from one major difference — the makes Ajax requests using the , whereas the makes Ajax requests using the .
The basic syntax of these methods can be given with:
$.get(URL, data, success); —Or— $.post(URL, data, success);
The parameters in the above syntax have the following meaning:
- The required URL parameter specifies the URL to which the request is sent.
- The optional data parameter specifies a set of query string (i.e. key/value pairs) that is sent to the web server along with the request.
- The optional success parameter is basically a callback function that is executed if the request succeeds. It is typically used to retrieve the returned data.
Note: The HTTP GET and POST methods are used to send request from a browser to a server. The main difference between these methods is the way in which the data is passed to the server. Check out the tutorial on GET and POST methods for the detailed explanation and comparison between these two methods.
Создание асинхронного AJAX запроса (метод GET)
Рассмотрим создание асинхронного AJAX запроса на примере, который будет после загрузки страницы приветствовать
пользователя и отображать его IP-адрес.
Для этого необходимо создать на сервере 2 файла в одном каталоге:
-
– HTML-страница, которая будет отображаться пользователю. В этой же страницы поместим
скрипт, который будет осуществлять все необходимые действия для работы AJAX на стороне клиента. -
– PHP-файл, который будет обрабатывать запрос на стороне сервера, и формировать ответ.
Начнём разработку с создания основной структуры файла
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Пример работы AJAX</title> </head> <body> <h1>Пример работы AJAX</h1> <div id="welcome"></div> <script> // Здесь поместим код JavaScript, который будет отправлять запрос на сервер, получать его и обновлять содержимое страницы. Всё это будет работать без перезагрузки страницы </script> </body> </html>
Рассмотрим последовательность действий, которые необходимо выполнить на стороне клиента (в коде JavaScript):
-
Подготовим данные, необходимые для выполнения запроса на сервере. Если для выполнения запроса на сервере данные
никакие не нужны, то данный этап можно пропустить. -
Создадим переменную, которая будет содержать экземпляр объекта XHR (XMLHttpRequest).
-
Настроим запрос с помощью метода .
Указываются следующие параметры:
- Метод, с помощью которого будет посылаться запрос на сервер (GET, POST).
- URL-адрес, который будет обрабатывать запрос на сервере.
- Тип запроса: синхронный (false) или асинхронный (true).
- Имя и пароль при необходимости.
-
Подпишемся на событие объекта XHR и укажем обработчик в виде анонимной или
именованной функции. После этого создадим код внутри этой функции, который будет проверять состояние ответа, и
выполнять определённые действия на странице. Ответ, который приходит с сервера, всегда находится в свойстве
.Дополнительно с проверкой значения свойства числу 4, можно проверять и значение свойства
. Данное свойство определяет статус запроса. Если оно равно 200, то всё . А
иначе произошла ошибка (например, 404 – URL не найден). -
Отправим запрос на сервер с помощью метода .
Если используем для отправки запроса метод GET, то передавать данные в параметр данного метода не надо. Они
передаются в составе URL.Если используем для отправки запроса метод POST, то данные необходимо передать в качестве параметра методу
. Кроме этого, перед вызовом данного метода необходимо установить заголовок Content-Type, чтобы
сервер знал в какой кодировке пришёл к нему запрос и смог его расшифровать.
Содержимое элемента :
// 2. Создание переменной request var request = new XMLHttpRequest(); // 3. Настройка запроса request.open('GET','processing.php',true); // 4. Подписка на событие onreadystatechange и обработка его с помощью анонимной функции request.addEventListener('readystatechange', function() { // если состояния запроса 4 и статус запроса 200 (OK) if ((request.readyState==4) && (request.status==200)) { // например, выведем объект XHR в консоль браузера console.log(request); // и ответ (текст), пришедший с сервера в окне alert console.log(request.responseText); // получить элемент c id = welcome var welcome = document.getElementById('welcome'); // заменить содержимое элемента ответом, пришедшим с сервера welcome.innerHTML = request.responseText; } }); // 5. Отправка запроса на сервер request.send();
В итоге файл будет иметь следующий код:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Пример работы AJAX</title> </head> <body> <h1>Пример работы AJAX</h1> <div id="welcome"></div> <script> window.addEventListener("load",function() { var request = new XMLHttpRequest(); request.open('GET','processing.php',true); request.addEventListener('readystatechange', function() { if ((request.readyState==4) && (request.status==200)) { var welcome = document.getElementById('welcome'); welcome.innerHTML = request.responseText; } }); request.send(); }); </script> </body> </html>
На сервере (с помощью php):
- Получим данные. Если данные посланы через метод , то из глобального массива
. А если данные переданы с помощью метода , то из глобального
массива . - Используя эти данные, выполним некоторые действия на сервере. В результате которых получим некоторый ответ.
Выведем его с помощью .
<?php $output = 'Здравствуйте, пользователь! '; if ($_SERVER) { $output .= 'Ваш IP адрес: '. $_SERVER; } else { $output .= 'Ваш IP адрес неизвестен.'; } echo $output;
4. PHP
Create file to handle AJAX request.
For example purpose, I am handling both GET and POST requests in a single file.
Assigned 2 to .
GET request (fetch records)
Check if is set or not if set then assign to .
If then fetch all records from table and assign in . Loop on the fetched records.
Return Array in JSON format.
POST request (insert record)
If then read POST values using .
Assing values to variables and prepare INSERT query.
If the INSERT query executed successfully then return otherwise .
Completed Code
<?php include "config.php"; $request = 2; // Read $_GET value if(isset($_GET)){ $request = $_GET; } // Fetch records if($request == 1){ // Select record $sql = "SELECT * FROM employee"; $employeeData = mysqli_query($con,$sql); $response = array(); while($row = mysqli_fetch_assoc($employeeData)){ $response[] = array( "id" => $row, "emp_name" => $row, "salary" => $row, "email" => $row, ); } echo json_encode($response); exit; } // Insert record if($request == 2){ // Read POST data $data = json_decode(file_get_contents("php://input")); $name = $data->name; $salary = $data->salary; $email = $data->email; // Insert record $sql = "insert into employee(emp_name,salary,email) values('".$name."',".$salary.",'".$email."')"; if(mysqli_query($con,$sql)){ echo 1; }else{ echo 0; } exit; }
Отлавливаем баги, PHP ошибки
Проблемы могут возникнуть при AJAX запросе и появлении ошибок PHP. Заметки или сообщения могут изменить возвращаемый результат или вызвать ошибку javascript.
Дебаг (вывод ошибок на экран)
Вариант:
Как правило запросы отправляются с браузера в файл. Поэтому чтобы увидеть результат запроса, ошибку или что-либо еще, можно открыть панель разработчика, выбрать именно наш запрос среди многих и посмотреть что он вернул.
При этом в коде можно использовать привычные функции print_r() или var_dump(), чтобы увидеть что находится в нужных переменных.
Вариант: включаем показ ошибок в AJAX запросах
WordPress по умолчанию не показывает ошибки для AJAX запросов даже если константа WP_DEBUG включена! Видно это в коде функции wp_debug_mode().
Несмотря на это такой показ можно включить, ведь на рабочих проектах у нас все равно WP_DEBUG отключена и боятся нам нечего, а вот баги выловить это помогает на ура!
Чтобы включить показ ошибок при AJAX запроса, нужно вставить такой код в файл темы functions.php или в плагин. Но лучшее его вставить как можно раньше, чтобы видеть ранние ошибки, лучше всего в MU плагины…
if( WP_DEBUG && WP_DEBUG_DISPLAY && (defined('DOING_AJAX') && DOING_AJAX) ){ @ ini_set( 'display_errors', 1 ); }
Вариант: вывод данных в лог файл
Если по ходу написания кода нужно заглянуть в переменную $myvar, то еще можно использовать такой код в обработчике ajax запроса:
error_log( print_r($myvar, true) );
В результате, в файл логов сервера (error.log) будет записано содержимое переменной $myvar. Так можно выполнить ajax, и заглянуть в лог.
Вариант: вывод PHP ошибок в лог файл
Чтобы выводить PHP заметки и ошибки в лог файл, нужно включить константу WP_DEBUG_LOG. Такой лог файл появится в папке wp-content.
Вариант:
Если не получается увидеть сообщение об ошибке и нужно работать в режиме разработчика, можно очистить буфер сразу перед возвратом данных:
ob_clean(); echo $whatever; die();
После этого нужно посмотреть что возвращает запрос через дебаг браузера или как-то еще…
Вариант:
Ошибка при возвращении данных
Если AJAX запрос на в файл провалился, то будет возвращен ответ или .
- — ошибка при проверке запроса. См. функцию check_ajax_referer()
- — обработка запроса вернула пустой результат
- — также возвращается по умолчанию во всех остальных случаях.
jQuery синтаксис:
Синтаксис 1.0: $.ajax( {settings} ) settings - PlainObject Синтаксис 1.5: $.ajax( url, {settings} ) url - String settings - PlainObject
jQuery функция $.ajax() лежит в основе всех AJAX запросов, отправленных с использованием jQuery. Не смотря на то, что функция $.ajax() может использоваться более гибко, в большинстве случаев в этом нет необходимости. В jQuery существуют такие альтернативные методы как $.get() и .load(), которые проще в использовании.
В самом простом виде функция $.ajax() может быть вызвана без параметров:
$.ajax() // без параметров
Обращаю Ваше внимание, что параметры по умолчанию могут быть установлены глобально с использованием jQuery функции $.ajaxSetup(). В этом примере функция $.ajax() используется без параметров и просто загружает содержимое текущей страницы, но ничего не делает с результатом
Чтобы использовать результат, вы можете определить одну из функций обратного вызова.
Получение json-данных с помощью getJSON
getJSON — укороченный вариант ajax-запроса методом GET и получением данных в виде json. Способ удобен, например, для получения какого-то массива с данными и последующей работы с ним.
$.getJSON('<url-адрес>', {par1:val1, par2:val2, ...}).success(function(data) { // что-то делаем с данными, например, обходим их в цикле и выводим: for (var i=0; i<data.length; i++) { console.log(data.text); } }).error(function(xhr, textStatus, errorThrown) { alert('Ошибка: ' + textStatus+' '+errorThrown); });
На стороне сервера программа формирует массив и преобразовывает его в json-строку, например, так:
$arr = array(); $arr = array('id' => 10, 'text' => 'тестовая строка 1'); $arr = array('id' => 20, 'text' => 'тестовая строка 2'); $arr = array('id' => 30, 'text' => 'тестовая строка 3'); echo json_encode($arr);
Точно так же можно передать с сервера и объекты stdClass, преобразовав их в json-строку.
Продвинутые настройки
Используя параметр global можно отключать выполнение обработчиков событий (.ajaxSend(), .ajaxError() и др.) для отдельных запросов. Это может быть полезно, например в случае, если в этих обработчиках запускается/останавливается анимация загрузки. Тогда если некоторые запросы выполняются очень часто и быстро, то для них полезно будет отключить выполнение обработчиков. Для кроссдоменных script и jsonp запросов параметр global отключается автоматически.
Если для совершения запроса к серверу необходимы данные аутентификации (логин/пароль), то их можно указать в настройках username и password ajax-запроса.
На выполнение запроса к серверу отводится определенное время. Если в течении этого времени сервер не присылает ответ, то запрос завершается с ошибкой (статус «timeout»). Время ожидания ответа от сервера можно изменить, задав необходимое значение (в миллисекундах) в настройке timeout.
Может так случиться, что кодировка хоста отличается от кодировки запрашиваемого в ajax-запросе javascript файла. В таких случаях необходимо указать кодировку последнего в настройке scriptCharset.
В большинстве случаев, ajax-запрос происходит асинхронно, однако в некоторых случаях может понадобиться последовательное выполнение запроса (когда дальнейшее выполнение скрипта невозможно, без получения ответа от сервера). Сделать запрос синхронным можно если отключить настройку async. Однако стоит помнить, что в таком случае станица будет «подвисать» при ожидании ответа от сервера.
Отправка формы со всеми данными ajax-запросом через jQuery
Примерный код html-формы:
<form id="myform" action="" method="POST"> <label for="user_name">Ваше имя:</label> <input name="user_name" value="" type="text" /> <input type="submit" value="Отправить"> </form>
JavaScript код:
$('#myform').submit(function(e) { e.preventDefault(); $.ajax({ type: $(this).attr('method'), url: '<url-адрес>', data: $(this).serialize(), async: false, dataType: "html", success: function(result){ alert('Форма отправлена'); } }); });
Для того чтобы страница не перезагружалась при нажатии на кнопку «submit», сначала отменяем стандартые действия браузера использовав e.preventDefaults().
В параметре data мы передаем все поля формы использовав $(this).serialize() — эта функция преобразует все input-ы и select-ы в строку, пригодную для отправки на сервер.
Так же, здесь использован параметр async: false, чтобы пока форма не отправится на сервер больше ничего нельзя было нажать или сделать.
HTTP-заголовки
XMLHttpRequest умеет как указывать свои заголовки в запросе, так и читать присланные в ответ.
Для работы с HTTP-заголовками есть 3 метода:
Устанавливает заголовок name запроса со значением value .
Нельзя установить заголовки, которые контролирует браузер, например Referer или Host и ряд других (полный список тут).
Это ограничение существует в целях безопасности и для контроля корректности запроса.
Особенностью XMLHttpRequest является то, что отменить setRequestHeader невозможно.
Повторные вызовы лишь добавляют информацию к заголовку, например:
Возвращает значение заголовка ответа name , кроме Set-Cookie и Set-Cookie2 .
Возвращает все заголовки ответа, кроме Set-Cookie и Set-Cookie2 .
Заголовки возвращаются в виде единой строки, например:
Между заголовками стоит перевод строки в два символа »
» (не зависит от ОС), значение заголовка отделено двоеточием с пробелом «: » . Этот формат задан стандартом.
Таким образом, если хочется получить объект с парами заголовок-значение, то эту строку необходимо разбить и обработать.
5. JavaScript
Use object to send AJAX request.
.open() – Methods takes 3 parameters –
- Request method – GET or POST.
- AJAX file path. Pass parameter with URL on GET request – .
- It is an optional parameter that takes Boolean value or . Default value is . Pass for asynchronous and for synchronous request.
.setRequestHeader() – This method is used to set . By default, content-type is set. You can change its value e.g. – , , etc.
.onreadystatechange – This property calls on request state change. Assign an anonymous function to process the response. If means server response is ready for processing.
.send() – This method send AJAX request. It is also used to send data.
GET syntax –
var xhttp = new XMLHttpRequest(); xhttp.open("GET", "ajaxfile.php?request=1", true); xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // Response var response = this.responseText; } }; xhttp.send();
Above syntax with jQuery
$.ajax({ url: 'ajaxfile.php?request=1', type: 'get', success: function(response){ } });
POST syntax –
is a default Content-Type but you can use any other type e.g. – , , etc.
var xhttp = new XMLHttpRequest(); xhttp.open("POST", "ajaxfile.php", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // Response var response = this.responseText; } }; var data = {name:'yogesh',salary: 35000,email: 'yogesh@makitweb.com'}; xhttp.send(JSON.stringify(data));
Above syntax with jQuery
$.ajax({ url: 'ajaxfile.php', type: 'post', data: {name:'yogesh',salary: 35000,email: 'yogesh@makitweb.com'}, success: function(response){ } });
Create 2 functions –
loadEmployees() – This function calls on page successfully loaded.
Create object of . Specify GET request and AJAX file path with parameter () in method. Set and handle server response with property.
Parse the to JSON object and select and empty it.
Loop on the to read values. Create a new table row element and assign a response value in cell.
Send the request by calling method.
insertNewEmployee() – This function calls on Submit button click.
Read values from the textboxes and assign them in variables. If variables are not empty then create a JSON object. Initialize object with the textbox values.
Create object and specify POST request and AJAX file path () in method. Set to and handle server response with property.
Assign in . If then alert a message and call function to fetch records.
Completed Code
loadEmployees(); // Load records with GET request function loadEmployees() { var xhttp = new XMLHttpRequest(); // Set GET method and ajax file path with parameter xhttp.open("GET", "ajaxfile.php?request=1", true); // Content-type xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // call on request changes state xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // Parse this.responseText to JSON object var response = JSON.parse(this.responseText); // Select <table id='empTable'> <tbody> var empTable = document.getElementById("empTable").getElementsByTagName("tbody"); // Empty the table <tbody> empTable.innerHTML = ""; // Loop on response object for (var key in response) { if (response.hasOwnProperty(key)) { var val = response; // insert new row var NewRow = empTable.insertRow(0); var name_cell = NewRow.insertCell(0); var username_cell = NewRow.insertCell(1); var email_cell = NewRow.insertCell(2); name_cell.innerHTML = val; username_cell.innerHTML = val; email_cell.innerHTML = val; } } } }; // Send request xhttp.send(); } // Insert new record with POST request function insertNewEmployee() { var name = document.getElementById('txt_name').value; var salary = document.getElementById('txt_salary').value; var email = document.getElementById('txt_email').value; if(name != '' && salary !='' && email != ''){ var data = {name: name,salary: salary,email: email}; var xhttp = new XMLHttpRequest(); // Set POST method and ajax file path xhttp.open("POST", "ajaxfile.php", true); // call on request changes state xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var response = this.responseText; if(response == 1){ alert("Insert successfully."); loadEmployees(); } } }; // Content-type xhttp.setRequestHeader("Content-Type", "application/json"); // Send request with data xhttp.send(JSON.stringify(data)); } }
Рассмотрим примеры AJAX запросов:
XMLHttpRequest, — экземпляр данного класса включает в себя набор методов для работы в протоколах HTTP и HTTPS. AJAX запрос, — это комплекс выполняемых задач, в режиме «запрос-ответ».
Каждый запрос к серверу, включает в себя ->
- Указание метода HTTP (GET POST)
- Запрашиваемого URL (пути до файла на сервере, который будет обрабатывать наш запрос)
- Установка заголовков на пример: «application/x-www-form-url» или «application/x-www-form-urlencoded» или «application/json» или «text-plain»
- Данные передаваемые на сервер (тело запроса)
Каждый ответ от сервера включает в себя <-
- Код статуса (успешно или нет отработала сторона сервера)
- Заголовки HTTP/HTTPS
- Данные передаваемые от сервера к клиенту (браузеру)