#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;