В моем мобильном, угловом приложении я пытаюсь отправить объект JSON на сервер для дальнейшей обработки.
Это мой JSON
$sessionsString = {"ojoijoj":[{"station":"AABB","height":80,"period":"20","gsh":"1.11","gsp":"20","gsd":"225","wsh":"1.11","wsp":"5.3","wsd":"270","dt":"2015-07-08T00:00:00.000Z","station2":"9410230","windStrength":"3.6","windDirection":"220","tideHeightInCM":115.06811989101},{"station":"CCBB","height":90,"period":"10","gsh":"1.7","gsp":"10","gsd":"207.5","wsh":"2.7","wsp":"9.9","wsd":"207.5","dt":"2015-07-16T21:00:00.000Z","station":"94102302","windStrength":"3.17","windDirection":"308.502","tideHeightInCM":83.986622073579}],"y4":[{"station":"DD","height":90,"period":"15","gsh":"1.11","gsp":"15","gsd":"225","wsh":"2.3","wsp":"5","wsd":"297.5","dt":"2015-07-04T19:00:00.000Z","station2":"9410230","windStrength":"1.5","windDirection":"280","tideHeightInCM":134.37293729373}]};'
Я отправляю свой JSON через
$http.post(requestURL, {'sessions':JSON.stringify(sessions)}).
success(function(data, status, headers, config) {
console.log('Success');
}).
error(function(data, status, headers, config) {
});
и фигурировал в некоторых других ссылках, что я должен получить данные через
$params = json_decode(file_get_contents('php://input'), true);
для получения параметров, а не с помощью обычного $ _POST по какой-либо причине. (Обнаружено это в других сообщениях, $ _POST не работает → это потокобезопасный путь кстати?)
Тем не менее, я хочу проанализировать данные сейчас, и это не сработает.
$sessionsString = $params['sessions'];
$sessions = json_decode($sessionsString,true);
$spotNames = array_keys($sessions);
array_keys
завершается с ошибкой, и ключи не найдены. Когда я напрямую назначаю приведенную выше строку JSON $sessionString
она работает нормально. Что происходит? Я не знаю, как отлаживать это, потому что это параметр POST, который я не могу полностью увидеть, и файл, зачитанный в PHP, также может быть проблемой.
Спасибо, EL
Не стягивайте в $http
просто пройти в объект. угловой позаботится о преобразовании в json
$http.post(requestURL, {sessions:sessions})...
Также первый json_decode
теперь должен работать без необходимости второго
Похоже, вы дважды вызываете json_decode
. Не знаете, почему $_POST
не сработал для вас, но вы всегда можете использовать var_dump($params)
чтобы увидеть, что происходит.
application/json
по умолчанию не кодирование формы, если вы не измените заголовок запроса