Как отправить POST запрос без перезагрузки страницы и вернуть строку (jq, php)
Иногда требуется обработать какие-либо данные в php без перезагрузки страницы и получить ответ в виде строки. В этом примере я покажу, как можно сделать данную процедуру.
Весь код html страницы я не буду выкладывать, ибо незачем, покажу только элемент, выполняющий запрос, jq скрипт, отправляющий запрос к нужному .php файлу и принимающий ответ, а так же сам php файл, обрабатывающий данный POST запрос.
Рассмотрим пример, в котором нам нужно при клике на button с id=1 вернуть из соответствующей строки таблицы базы данных MySQL текстовую строку и занести ее в этот самый button.
Создаем button:
<button id="1" onclick="work(this)">Батон</button>
Пишем скрипт отправляющий POST запрос и принимающий строку:
function work(obj) { $.post("work.php", { // Указываем php файл what: "zapros", // Передаем идентивикатор запроса data: obj.id // Передаем идентивикатор элемента }, function (data) { $(obj).html(data) // Получаем данные после обработки }); }
Обрабатываем запрос:
<?php // work.php header("Content-Type:text/html;charset=UTF-8"); // Кодирока if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Если POST запрос if ($_POST['what'] == 'zapros'){ // Нужный идентификатор запроса $db = mysql_connect('localhost','root','') or die('Ошибка БД'); mysql_select_db('test', $db); // Подключаемся к БД mysql_query("SET NAMES 'UTF8'"); $id = (int)$_POST['data']; // Т.к. нам нужно число $query = "SELECT text FROM sql_table WHERE id='$id'"; $result = mysql_query($query)or die('Нет значений в БД'); $data = mysql_fetch_array($result, MYSQL_ASSOC); if(isset($data['text'])) echo $data['text']; else echo 'В БД нет строки'.$id; } } ?>
Таким образом то, что выводит php скрипт с помощю функции echo попадает как ответ в наш javascript и передается текщему элементу.