Доброе утро! Я раньше работал с Mootools, там эта ситуация реализуется вообще без проблем. Но сайт на jQuery, поэтому вопрос самый элементарный. Итак, имеем форму: Код (Text): <form name="pageEdit" id="pageEdit"> <table width="100%"> <tr> <td>Заголовок: <input name="pageTitle" size=55 value="{$PAGE_TITLE}"></td> </tr> <tr> <td> <input type="button" class="btn" value="Отправить данные"> </td> </tr> Имеем также отрывок кода jQuery: Код (Text): $(document).ready(function() { $('.btn').bind('click', function() { $.ajax({ url: 'http://localhost/cms/admin/editPage.php', dataType: 'json', data: $('#pageEdit').serialize(), cache: false, success: function (data) { alert(data); } }); }); }); И, наконец, имеем php-скрипт: Код (Text): <?php require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php'; //получим данные $page_number = $_POST['pageNumber']; $page_title = $_POST['pageTitle']; $page_keywords = $_POST['page_keywords']; $page_descr = $_POST['page_description']; $page_content = $_POST['page_content']; echo json_encode($page_title); ?> В результате выполнения сего счастья получаю null. Если действовать без json, получаю просто пустой алерт. Вопрос: как получить данные от сервера и как их принять? Что я делаю не так?
PHP: <?php require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php'; //получим данные $page_number = $_POST['pageNumber']; $page_title = $_POST['pageTitle']; $page_keywords = $_POST['page_keywords']; $page_descr = $_POST['page_description']; $page_content = $_POST['page_content']; echo json_encode(array('text' => $page_title)); [js]$(document).ready(function() { $('.btn').bind('click', function() { $.ajax({ url: 'http://localhost/cms/admin/editPage.php', dataType: 'json', data: $('#pageEdit').serialize(), cache: false, success: function (data) { alert(data.text); } }); }); }); [/js]
Понял, спасибо. Самый главный вопрос: как эту радость передавать POSTом? type=POST почему-то не работает... а гетом - у меня целая страница будет в коде передаваться, она по-любому больше килобайта будет весить, может просто не вписаться в стандарты. И ещё. Вот предположим я данные записал в базу. Мне нужно что-то вернуть клиенту. Просто указание PHP: $var = json_encode(array( 'text' => 'успешно' )); echo $var; Не работает. Я понимаю почему (передаётся форма, а данной переменной там нет). Но как это побороть? Причём заранее абсолютно неизвестно что буду передавать...
бред какойто. используй $.post() или $.get() и не нужно ничего дополнительно указывать. $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(data){alert(data.text);}, 'json'); + echo json_encode(array('text' => $POST['var']));
Апельсин Не работает в таком варианте! Просто без ошибки, но ничего не происходит.... это не бред, я хочу разобраться в чём причина...
На всякий случай: аяксовую библиотеку подключаю вот с этого адреса: http://ajax.googleapis.com/ajax/libs/jq ... ery.min.js
Разобрался, у меня в начале скрипта стоял .ajaxSetup с type=GET, поэтому пхп не мог ничего понять что нужно... Вопрос остаётся открытым о передаче данных... Т.е. смотрите: взял данные, записал их в базу. Запись может пройти либо успешно либо с ошибкой, о чём мне надо известить клиента хотя бы тем же алертом. Каким образом дополнительные данные (переменную из пхп, не входящую в состав формы) передать клиенту?
Т.е. грубо говоря, ещё раз скажу: в PHP будет некая булевская переменная (может и не булевская), значение которой надо вывести клиенту. Вот такая задача. Вопрос элементарный, но все мы когда-то учились
В начале скрипта обьявляешь $error = null; По мере работы скрипта в эту переменную записываешь ошибки (можно и массив для этого, а можно и так). Потом эти ошибки отдаешь в браузер: echo json_encode(array('error' => $error)); А в хтмл-файле проверяешь через js: if(data.error == null) { действия, когда все успешно } else alert(data.error);//или выдаем ошибку
Ну как бы смотри: PHP: <?php require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php'; $message = 'bvb'; $error = null; //получим данные $page_title = $_REQUEST['pageTitle']; $page_keywords = $_REQUEST['page_keywords']; $page_descr = $_REQUEST['page_description']; $page_content = $_REQUEST['page_content']; $query = 'UPDATE pages SET page_title = "'.$page_title.'", page_description = "'.$page_descr.'", page_keywords = "'.$page_keywords.'", page_content = "'.$page_content.'"'; $db->query($query); $mysql_error = mysql_error(); if (!empty($mysql_error)) { $message = 'Произошла ошибка: ' . $mysql_error; $error = true; } else { $message = 'Отредактировано'; $error = null; } echo json_encode(array('error' => $error, 'message' => $message)); ?> AJAX: Код (Text): $(document).ready(function() { $('.btn').bind('click', function() { $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg) { if (msg.error == null) { alert(msg.message); } else { alert(msg.message); } }, 'json'); }); }); В ответ получаю null. Что не так?
А самое главное - реального обновления почему-то нее происходит, хотя код, вроде бы правильный. Конечно же изменил SQL, добавив условие WHERE это само собой но всё равно ничего не происходит. Я так полагаю, что мог что-то забыть... но в этом случае mysql_error() не должна быть пустой...и соответственно выводиться клиенту... как раз та обратная связь, которой я добиваюсь...
Переделал отрывок кода вот таким образом: PHP: if (!empty($mysql_error)) { $message = 'Произошла ошибка: ' . $mysql_error; $error = 1; echo json_encode(array('error' => $error, 'msg' => $message)); } else { $message = 'Отредактировано'; $error = null; echo json_encode(array('error' => $error, 'msg' => $message)); } ноль реакции...
Совсем хрень! Код (Text): $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(data) { alert(data.msg); }, 'json'); }); alert(data.error) даёт 1. alert(data.msg) даёт null. Типа ошибка произошла, но что за ошибка - хрен скажу ))) ну что ж такое-то???
echo json_encode(array('error' => $error, 'message' => $message)); эту строчку замени временно на $error = 1; $message = 2; echo json_encode(array('error' => $error, 'message' => $message)); это смени $(document).ready(function() { $('.btn').bind('click', function() { $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg) { if (msg.error == null) { alert(msg.message); } else { alert(msg.message); } }, 'json'); }); }); на $(document).ready(function() { $('.btn').bind('click', function() { $.post('/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg) { alert(msg.error); alert(msg.message); }, 'json'); }); });