2013-09-21 4 views
-3

У меня есть запрос JQuery AJAX, отсылающий некоторые данные JSON в PHP-скрипт, однако, когда дело доходит до манипулирования данными или даже пытается получить к нему доступ, оно ведет себя как но мне нужно, чтобы он вел себя как ассоциативный массив.JSON в PHP некорректно отформатирован из запроса JQuery Ajax

JavaScript

var all_data = []; 

$.each($("[id*=card]"), function(i, value) { 
    var name_a = $(value).find('#story_name_div').text(); 
    var text_a = $(value).find('#story_text_div').text(); 
    var point_a = $(value).find('#story_point_div').text(); 
    var phase_a = $(value).find('#story_phase').val(); 
    var date_a = $(value).find('#story_date').val(); 
    var author_a = $(value).find('#username_div').text(); 

var story_data = { 
    "name": name_a , 
    "text": text_a , 
    "point": point_a , 
    "data": phase_a , 
    "date": date_a , 
    "author": author_a 
}; 

all_data.push(story_data); 

}); 

$.ajax({ 
    url: 'save_server_script.php', 
    type: 'POST', 
    processData:false, 
    dataType: "json", 
    data: "json=" + JSON.stringify(all_data), 
    success: function(res){ 
    var json_a = $.parseJSON(res); 
    console.log(json_a); 
    }, 
    error: function(err){ 
    console.log("error"); 
    } 
}); 

JSON, который создается

[json] => [{"name":"jhb","text":"gjh","point":"jhv","phase":"planning","date":"21/9/2013 - 4:23:16","author":"Created by - ljhlkjhb"}] 

PHP

print_r($_POST); // prints out entire JSON 
print($_POST["json"][0]["story_name"]); 
// Warning : Illegal string offset 'story_name' in C:\xampp\htdocs\save_server_script.php on line 15 
print($_POST["json"][0]); // prints out a '[' 
foreach($_POST["json"] as $hello) { // invalid argument supplied for foreach 
    print $hello["story_name"]; 
} 

Я также пробовал декодирование через PHP, но безрезультатно.

+1

Где ваш вопрос? – BlitZ

+0

Извинения. Мне нужно, чтобы JSON управлялся как массив в PHP, например $ _POST ["json"] [0] ["story_name"] или что-то в этом роде, поскольку мне нужно будет пропустить JSON, если есть больше данных , – TheSunny

+0

_ «он ведет себя как строка» _ - Это потому, что JSON по определению является строкой. Чтобы использовать его в своем PHP, вам нужно сделать то, что сказал Майк У. Обратите внимание, однако, что если ваш PHP возвращает JSON в своем ответе, вам не нужно использовать '$ .parseJSON()' в вашем обработчике успеха ajax, потому что, когда вы укажете 'dataType:" json ", jQuery автоматически проанализирует его для вас. – nnnnnn

ответ

0

Попробуйте

$json = json_decode($_POST['json']); 

echo $json[0]->author; 

В вашем фрагменте кода вы имеете в виду story_name, но это не является элементом в вашем JSON строку.

+0

Это был долгий день, у моей локальной копии все работает нормально, должно быть, испортилось на стеке. Извинения, это решение не работает. – TheSunny

+0

@ TheSunny Не уверен, что означает «не работает». См. Это [скрипка] (http://phpfiddle.org/main/code/51e-b9p) –

0

Вы должны декодировать JSON в массив в PHP первый:

$arr = json_decode($_POST["json"]); 
//now you can use foreach on the array it returned 
foreach($arr as $key => $value){ 
    //now you can use $value["text"] , $value["author"] etc 
} 

Данные, полученные с помощью PHP в JSON формате, необходимых для преобразования в формат массива, чтобы использовать Еогеасп на нем. PS В ваших данных json нет «story_name».

+0

Я пробовал ваше решение, и эта ошибка вызывается: Неустранимая ошибка: нельзя использовать объект типа stdClass как массив в C: \ xampp \ htdocs \ save_server_script.php в строке 19. Что я пытаюсь напечатать 'print $ value ["text"];' – TheSunny

+0

Кажется, это печатает всю строку JSON. 'foreach ($ arr as $ value) { \t foreach ($ value as $ hi) { \t \t print $ hi; \t} } ' – TheSunny

+0

Он будет распечатывать все значения в строке json, а не в самой строке json, потому что вы выполнили итерацию по каждому значению и распечатали их все. Если он действительно печатает строку в формате json, тогда должна быть ошибка. –

Смежные вопросы