Как отправить 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 и передается текщему элементу.