Многомерный массив через ajax в php превращается в ноль через json_decode - PullRequest
0 голосов
/ 11 марта 2011

Я собрал данные с помощью jQuery, поместил их в многомерный массив, использовал JSON.stringify и передал их в PHP с помощью AJAX, по какой-то причине json_decode продолжает выдавать мне ошибку Syntax error, malformed JSON.

Вот JSON, который передается в PHP

[\"foo\",\"foobar did the baz\",[[\"bar\",\"kg\",\"200\"],[\"baz\",\"l\",\"1337\"]]]

Странно то, что я использую JSON.stringify для многомерного массива в JS.Вот как я это собрал

var dataz = [];
var arrayContainingAll = [];

$("li", "#ingredientlist").each(function() {
    var tempArray = [];
    tempArray.push($(".ingredientname", this).text());
    tempArray.push($(".unittext", this).text());
    tempArray.push($(".amounttext", this).text());
    arrayContainingAll.push(tempArray);
});

dataz.push($("h1").text());
dataz.push($("#method").val());
dataz.push(arrayContainingAll);
var json = JSON.stringify(dataz);

Как я могу заставить PHP правильно анализировать многомерный массив?Я исправил это, передав 3 различных строковых массива, но больше любопытно, почему многомерный массив терпит неудачу

PHP, чтобы показать, что происходит: var_dump(json_decode($_POST['ingredients']));

, потому что это явноважно показать, как я публикую данные, вот как JS выполняет запрос ajax

$.ajax({
    url: '/api/savenewrecipe.php',
    type: 'POST',
    data: 'ingredients=' + json + "&name=" + $("h1").text() + "&method=" + $("#method").val(),
    success: function(result) {
        if (result.ok == true) {
            // @todo remove this for debugging purposes
            //document.location.href = '/recipe/' + result.id;
        }
        else {
            showError("Noget gik galt!", 2000);
        }
    }

});

1 Ответ

2 голосов
/ 11 марта 2011

Если ваш сервер использует магические кавычки, вам нужно удалить их:

if (get_magic_quotes_gpc()) {
  $_POST['ingredients'] = stripslashes($_POST['ingredients']);
}
...