Моя проблема в основном заключается в том, что я не могу понять правильный синтаксис (никогда не использовал JSON раньше), как на стороне js, так и на PHP, но я думаю, что я могу определить сторону PHP, когда я выясню js.
Логическая цель: отправить данные JSON, сохраняющие переменную id # и константу string 'del', получать данные JSON, содержащие данные об успешности/ошибке, а затем основываясь на успехе/ошибке, результаты эха в разные html. Мне больше всего интересно узнать код javascript при отправке и обработке полученного json, я думаю, что обработка PHP должна быть более простой, чтобы разобраться в моей собственной (надеюсь).
edit - когда я говорю об успехе/ошибке, я хочу, чтобы это было определено в PHP-коде, а не TRUE hard error. поэтому, возможно, лучше подумать об этом как о простом выражении if
в части функции обратного вызова jQuery.
$(".admin_ru_delete_button").click(function() { //this code is not working
id = ($(this).attr("id"));
dataJson = { "id":id, "type":"del" };
$.post(
'ajax/justPosted_AJAX.php',
dataJson,
function(data){
//$("#admin_errors").html('');
//$("#admin_success").html('');
}
, "json");
return false;
});
Большое спасибо за ваше время/помощь!
Данные преобразуются из объекта javascript в переменные POST. JSON не имеет к этому никакого отношения (кроме PHP-> JS-части).
if (!empty($_POST['id'])) {
if (!empty($_POST['type'])) {
echo json_encode(array('success' => true, 'id' => $_POST['id']));
} else {
echo json_encode(array('success' => false, 'error' => 'type missing'));
}
} else {
echo json_encode(array('success' => false, 'error' => 'id missing'));
}
и в вашем обратном вызове (который автоматически преобразуется в объект, поскольку вы указали тип контента "json"):
function(data){
if (data.success) {
alert('Yay! The ID I sent was ' + data.id);
} else {
alert(data.error);
}
}
Если вы хотите получить ошибку, когда JSON не возвращается, вы можете использовать $.ajax
:
$.ajax(
'ajax/justPosted_AJAX.php',
{
dataType: 'json',
data: dataJson,
success: function(data){
if (data.success) {
alert('Yay! The ID I sent was ' + data.id);
} else {
alert(data.error);
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert('The AJAX call failed: ' + textStatus + ' / ' + errorThrown);
}
}
);
Можешь попробовать:
Javascript
$(".admin_ru_delete_button").click(function() {
id = ($(this).attr("id"));
$.ajax(
type: "POST",
dataType: "JSON",
url: 'ajax/justPosted_AJAX.php',
data: { "id":id, "type":"del" },
success: function(data){
$("#admin_success").html(data[1] +" "+ data[2]);
}
error: function(data){
console.Log("Error in ajax");
});
return false;
});
Предполагается, что вы возвращаете JSONObject/JSONArray из PHP с помощью json_encode($array)
.
success
и error
.
$.post
является обработчиком успеха, который будет вызываться, если ваш PHP вернет документ без кода ошибки. Документы содержат больше информации об обработчиках сбоев, если вы хотите использовать статус HTTP для управления успехом / неудачей, в противном случаеdata
в вашем обработчике успеха могут быть документом JSON, например{"errState": false, "somekey": {...}}
который вы можете затем проверить в своем обработчике успеха с помощьюdata["errState"]
.