Массивы Ajax и JSON

#javascript #php #jquery #ajax #json

#javascript #php #jquery #ajax #json

Вопрос:

Я пытаюсь использовать формат данных JSON вместе с jQuery, и было бы удивительно, если бы это сработало.

В моем remoteServiceEngine.php , У меня есть что-то вроде этого:

 $jResponse[0] = json_encode(array("jAction" => "add", "jObject" => "listCountries", "jBody" => "test"));
$json_data = json_encode(array("jRequestState" => $jRequestState, "jMessage" => $jMessage, "jResponse" => $jResponse));
echo $json_data;
 

И вот как это обрабатывается в JS:

  success: function(remoteResponse){
        switch(remoteResponse.jRequestState) {
            case 0:
                $("#removeServiceMessage").fadeIn(2000).html('<div class="remoteError">' remoteResponse.jMessage '</div>').fadeOut(2000);
            break;

            case 1:
                $("#removeServiceMessage").fadeIn(2000).html('<div class="remoteSuccess"><B>Success:</B> ' remoteResponse.jMessage '</div>').fadeOut(2000);
                for (i = 0; i < remoteResponse.jResponse.length; i  ) {
                    switch(remoteResponse.jResponse[i].jAction) {
                        case "add":
                            $("#" remoteResponse.jResponse[i].jObject).fadeIn(1000).append(remoteResponse.jResponse[i].jBody);
                        break;

                        case "remove":
                            $("#" remoteResponse.jResponse[i].jObject).fadeOut(1000);
                        break;

                        case "update":
                            $("#" remoteResponse.jResponse[i].jObject).fadeIn(1000).html(remoteResponse.jResponse[i].jBody);
                        break;

                        default:
                            alert(remoteResponse.jResponse[i]);
                        break;
                    }
                }
            break;
        }
    }
 

Вся проблема в том, что я не могу получить доступ к успешному контенту. С помощью $jRequestState = 1 и вышеупомянутого $ JResponse[0] переключатель переходит непосредственно к умолчанию, и это результат, который я получаю:

 {"jAction":"add","jObject":"listCountries","jBody":"test"}
 

но я не могу понять, как получить доступ к этим элементам. Я попробовал это с:

 alert(remoteResponse.jResponse[i]['jAction']);
 

и

 alert(remoteResponse.jResponse[i][0]); //yeah, that's kinda stupid solution, but well...
 

Поскольку я никогда не использовал JSON с jQuery, я не могу понять, как с этим справиться. Помогите, кто-нибудь?

Комментарии:

1. Вы кодируете $jResponse[0] как JSON дважды в PHP.

2. возможно, вы захотите взглянуть на knockout , потому что это работает для минимизации использования jQuery, обрабатывая только данные и привязывая их к соответствующим элементам управления, если вам интересно, отправьте ответное сообщение, и я опубликую для вас ответ на knockout 🙂

Ответ №1:

Как сказал аденео в комментарии, вы дважды jsonencode. Ваш php-код должен выглядеть следующим образом:

 $jResponse[0] = array("jAction" => "add", "jObject" => "listCountries", "jBody" => "test");
$json_data = json_encode(array("jRequestState" => $jRequestState, "jMessage" => $jMessage, "jResponse" => $jResponse));
echo $json_data;