Здравствуйте, совсем недавно начал использовать ajax...
Можно ли как-то изменить содержимое нескольких элементов dom-дерева, отталкиваясь от полученного ответа сервера?
Есть блок, в котором отображаются успешные вернувшиеся ответы. Он называется #refresh.
Есть блок, в котором отображается название ошибки, если ответ вернулся с ошибкой. Он называется #error
Этим кодом отправляю и получаю результат
$("body").on("click","#add_sql",function(){
var msg=$('#AddProduct').serialize();
$.ajax({
type:'POST',
url:"/php/1.php",
data:msg+"&producti=productie",
cache:false,
success:function(data){
var obj=jQuery.parseJSON(data); // Получаем ответ в json
if (obj.code=="200") { // Если код ответа 100
$("#refresh").html(data); // Отобразим содержимое в #refresh
}
else if (obj.code=="100") { // Если код ошибки 100
$("#error").html(obj.text); // Отобразим текст ошибки в #error
}
},
error:function() {
$("#error").html("Ошибка сети"); // Если у пользователя нет сети -- вернём ошибку.
}
});
});
Обработчик:
if(isset($_POST["producti"])){
if($_POST["producti"]=="productie"){
$e1=null;
$name=htmlspecialchars($_POST['name']);
$name=strip_tags($name);
if(mb_strlen($name,"utf-8")<=0) {
$e1.="1";
$err.= 'Заполните поле "Наименование';
}
$count=htmlspecialchars($_POST['count']);
$count=strip_tags($count);
if(mb_strlen($count,"utf-8")<=0) {
$e1.="2";
$err.= 'Заполните поле "Колличество';
}
if($e1==null){
$jsonRes='true';
$jsonCode='200'; // Код успешного ответа
$jsonMessage='Good respo..';
$text='Товар был успешно добавлен'; // Следует заменить на свой текст или содержимое.
} else
$jsonRes='false';
$jsonCode='100'; // код ошибочного ответа
$jsonMessage='Error message';
$text=$err; // Заменить на своё содержимое
}}
$array = array('result'=>$jsonRes,'code'=>$jsonCode,'message'=>$jsonMessage,'text'=>$text); // Соберём ответ
echo json_encode($array); // вернём json ответ
Для этого страница /php/operation.php должна возвращать не только содержимое ответа для отображения, но и код ответа/ошибки, по которому можно отслеживать: возвращается ли ошибка либо нужный результат.
Допустим, на /php/operation.php проверяется только наличие передаваемых данных:
$value=$_POST['data'];
// проверим наличие передаваемых данных
if ($value) {
$jsonRes='true';
$jsonCode='200'; // Код успешного ответа
$jsonMessage='Good respo..';
$text='Содержимое товара, для отображения на странице в #refresh'; // Следует заменить на свой текст или содержимое.
}
// Если параметры не переданы - вернём ошибку
else {
$jsonRes='false';
$jsonCode='100'; // код ошибочного ответа
$jsonMessage='Error message';
$text='Текст с ошибкой, который отобразится в #error'; // Заменить на своё содержимое
}
$array = array('result'=>$jsonRes,'code'=>$jsonCode,'message'=>$jsonMessage,'text'=>$text); // Соберём ответ
echo json_encode($array); // вернём json ответ
Теперь, имея код ошибки - можно манипулировать ответом:
function productClick(){
var msg=$('#AddProduct').serialize();
$.ajax({
type:'POST',
url:"/php/operation.php",
data:msg+"&producti=productie",
cache:false,
success:function(data){
var obj=jQuery.parseJSON(data); // Получаем ответ в json
if (obj.code=="200") { // Если код ответа 100
$("#refresh").html(data); // Отобразим содержимое в #refresh
}
else if (obj.code=="100") { // Если код ошибки 100
$("#error").html(obj.text); // Отобразим текст ошибки в #error
}
},
error:function() {
$("#error").html("Ошибка сети"); // Если у пользователя нет сети -- вернём ошибку.
}
});
}
Оказалось всё проще чем я думал, сделал примерно так вот ajax код:
function add_p(){
var msg=$('#AddProduct').serialize();
$.ajax({
type:'POST',
url:"/php/1.php",
data:msg,
cache:false,
success:function(data){
var a=data.split('~'); // Разрезаю полученный ответ до знака ~
if(a[0]=='error_r'){$(".error_r").html(a[1]);}; // Проверяю какой блок обновить и вставляю в него всё что после знака ~
if(a[0]=='refresh'){$(".refresh").html(a[1]); $(".error_r").html('<h5>Успешно добавлено</h5>');}; // Тоже самое, но еще вывожу сообщение в блок с ошибками, что выполнено успешно
}
});
};
На php я вывожу текст добавляя в начала класс блока что бы проверить к чему это относится к ошибке или нет. К примеру:
echo 'error_r~Вы оставили поле с названием пустым, заполните его';
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я делаю проект программы долговУ меня есть библиотека файлов в которую записываются все долги
Возможна ли реализация кнопки Поделиться в Instagram? Например, прикрепляешь кнопку к статье и делишься в Instagram intro-картинкой из этой статьиВезде,...