JQuery 1.4.4+ AJAX-запрос - публиковать пустой массив или объект становится строкой - PullRequest
6 голосов
/ 16 марта 2011

У меня есть объект в Javascript, который я пытаюсь AJAX POST для сценария PHP. Все работало в jQuery 1.4.1, но теперь в 1.4.4 или выше все пустые массивы или пустые объекты поступают в виде строки (0), что неверно.

JS

$(document).ready(function() {
var obj = {};
obj.one = [];
obj.two = {};
obj.three = [];
obj.three.push('one');
obj.three.push('two');
obj.three.push('three');
obj.four = "onetwothree";

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: obj,
    success: function(data) {
        alert(data);
    },
});
});

PHP:

<?php
var_dump($_POST);
?>

РЕПЛИКА:

array(4) {
  ["one"]=> string(0) ""
  ["two"]=> string(0) ""
  ["three"]=> array(3) {
    [0]=> string(3) "one"
    [1]=> string(3) "two"
    [2]=> string(5) "three"
  }
  ["four"]=> string(11) "onetwothree"
}

В версии 1.4.1 он просто НЕ отправил бы ["one"] или ["two"], но теперь в более новых версиях тот факт, что он приходит в виде строки, отбрасывает все приложение. Могу ли я что-нибудь сделать, чтобы пустой массив ([]) поступал в PHP как пустой массив ([]) и так же с объектами JavaScript?

Ответы [ 2 ]

3 голосов
/ 09 мая 2012

попробуйте применить JSON.stringify к переданным параметрам

 data: JSON.stringify ( obj ),

Обратите внимание, что вы, вероятно, захотите включить опцию contentType: "application/json", чтобы запрашивать на стороне сервера правильную обработку данных.

цитата: Почему jQuery ajax не сериализует мой объект?

традиционный: true абсолютно неверен, поскольку он никогда не может обрабатывать иерархии объектов.Вместо этого вы получите: ... & key = [object Object], который является результатом javascript toString () по умолчанию для всех объектов.

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

Попробуйте установить для параметра traditional значение true:

$.ajax({
    type: 'POST',
    traditional: true,
    url: 'ajax.php',
    data: obj,
    success: function(data) {
        alert(data);
    }
});

Ознакомьтесь с параметрами data и traditional более нового API .

И удалите лишнюю запятую после обратного вызова success, если хотите, чтобы все работало в IE7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...