2014-10-21 2 views
0

У меня есть следующие JSON послал (POST) из моего JavaScript в PHPДекодирование Json Строка Из JavaScript в PHP

function boardToJSON() { 
    return JSON.stringify({ 
     "pieces" : gPieces,   // gpieces and gdestinations is an array 
     "destinations" : gDestinations, 
     "boardSize" : kBoardHeight  // boardSize is an integer value 9 

    }); 

// Ниже функция вызывается на кнопки Click и URLсодержит путь к php-файл.

function makeMove() { 
    var move; 
    $.ajax({ 
     type: 'POST', 
     url: url, 
     contentType: "application/json", 
     dataType: "json", 
     async: false, 
     data: boardToJSON(), 
     success: function(msg) { 
      move = msg;  
     }, 
     error: function(jqXHR, exception) { 
      if (jqXHR.status === 0) { 
       alert('Unable to connect.\n Verify Network.'); 
      } else if (jqXHR.status == 404) { 
       alert('Requested URL of HalmaAI not found. [404]'); 
      } else if (jqXHR.status == 500) { 
       alert('Internal Server Error [500].'); 
      } else if (exception === 'parsererror') { 
       alert('Data from HalmaAI was not JSON :(Parse failed.'); 
      } else if (exception === 'timeout') { 
       alert('Time out error.'); 
      } else if (exception === 'abort') { 
       alert('Ajax request aborted.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 

    }); 

На стороне сервера (в PHP) Я пытаюсь получить его, как этот

$jsonString = file_get_contents("php://input"); 
$myJson = json_decode($jsonString); 

echo $myJson["boardSize"]; // also tried $myJson.boardSize etc 

Проблема в том, что я не могу расшифровать JSON в PHP. Может ли кто-нибудь мне помочь здесь, пожалуйста? Спасибо

+1

Я не понимаю. Вы говорите, что публикуете JSON, но PHP, который вы показываете, пытается загрузить JSON из файла, а не получать его из POST. – Utkanos

+2

@Utkanos, который является сырым почтовым телом ... – PeeHaa

+0

Как вы отправляете данные? Что сказал 'var_dump()' вам? – PeeHaa

ответ

1

Вы должны установить свойство contentType на запрос AJAX на адрес application/json. Это сделает правильный заголовок по запросу, так что сервер не будет пытаться заполнить $_POST в пользу вас, работающего с исходным вводом.

function makeMove() { 
    var move; 
    $.ajax({ 
     type: 'POST', 
     url: url, 
     contentType: "application/json" 
     dataType: "json", 
     async: false, 
     data: boardToJSON(), 
     success: function(msg) { 
      move = msg;  
     } 
    }); 
} 

Предполагая, что это работает, вы можете получить доступ к boardSize собственности по адресу:

$myJson->boardSize; 

Другая проблема у вас есть то, что так как вы указать dataType: "json" вы должны убедиться, что вы отправить обратно действительный JSON, который вам в настоящее время нет.

Это не является действительным JSON:

echo $myJson["boardSize"]; 

Это было бы (конечно, это тривиальный пример):

$returnObj = new stdClass(); 
$returnObj->boardSize = $myJson->boardSize; 
echo json_encode($returnObj); 
+0

Теперь, как я могу получить значение boardSize на стороне сервера? – farhangdon

+0

@farhangdon Извините. Обновленный мой ответ, чтобы показать это. –

+0

Нет, он говорит, что данные возвращены не Json. – farhangdon

0

Если вы хотите декодировать JSON в массив в PHP, вы должны установить второй аргумент json_decode - true.
Пример:

$jsonString = file_get_contents("php://input"); 
$myJson = json_decode($jsonString, true); 
echo $myJson["boardSize"]; 
Смежные вопросы