Использование $ .post для отправки базового JSON в php с обратным вызовом

0

Моя проблема в основном заключается в том, что я не могу понять правильный синтаксис (никогда не использовал 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;
});

Большое спасибо за ваше время/помощь!

  • 0
    Согласно документации jQuery.post ваша функция, определенная в вашем вызове $.post является обработчиком успеха, который будет вызываться, если ваш PHP вернет документ без кода ошибки. Документы содержат больше информации об обработчиках сбоев, если вы хотите использовать статус HTTP для управления успехом / неудачей, в противном случае data в вашем обработчике успеха могут быть документом JSON, например {"errState": false, "somekey": {...}} который вы можете затем проверить в своем обработчике успеха с помощью data["errState"] .
  • 1
    Проверьте ответ в Firebug Net Panel или на панели Webkit Network!
Показать ещё 1 комментарий

2 ответа

1
Лучший ответ

Данные преобразуются из объекта 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);
        }
    }
);
  • 0
    Он сказал: «Меня больше всего интересует изучение кода javascript по отправке и обработке полученных json»
  • 0
    @WayneWhitty Тем не менее он добавил, что не знает точного PHP, но подумал, что, возможно, его нужно декодировать в формате JSON, а это не так. Я добавил описание обработки JSON как из PHP, так и из JS.
Показать ещё 8 комментариев
0

Можешь попробовать:

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).

  • 0
    Ммм .. $.post не принимает success и error ?
  • 0
    О да, я написал это на скорую руку. Спасибо за толчок. Он должен использовать простой вызов $ .ajax, если он хочет обработать success и error .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню