#php #javascript #ajax #post
Здравствуйте, совсем недавно начал использовать 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 ответ
Ответы
Ответ 1
Для этого страница /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") { // Если код ответа 200 $("#refresh").html(data); // Отобразим содержимое в #refresh } else if (obj.code=="100") { // Если код ошибки 100 $("#error").html(obj.text); // Отобразим текст ошибки в #error } }, error:function() { $("#error").html("Ошибка сети"); // Если у пользователя нет сети -- вернём ошибку. } }); }Ответ 2
Оказалось всё проще чем я думал, сделал примерно так вот 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('Успешно добавлено
');}; // Тоже самое, но еще вывожу сообщение в блок с ошибками, что выполнено успешно } }); }; На php я вывожу текст добавляя в начала класс блока что бы проверить к чему это относится к ошибке или нет. К примеру: echo 'error_r~Вы оставили поле с названием пустым, заполните его';
Комментариев нет:
Отправить комментарий