Почему serialize () имеет тот же эффект, что и serializeArray (), при настройке данных публикации для jQuery.ajax ()? - PullRequest
17 голосов
/ 21 ноября 2010

у меня есть этот код jQuery-AJAX ниже и форма:

<script type="text/javascript">
$(document).ready(function () {
    $('form').submit(function () {
        form_data = $(this).serializeArray();

        $.ajax({
            url: "/frontend_dev.php/coche1/update/id/1",
            type: "POST",
            data: form_data

            });
        });
        return false;

});
</script>

Как вы можете видеть, я использую serializeArray(), но когда я использую serialize(), он также работает так же ..

Почему в обоих случаях работает одинаково?Какие из них я должен использовать?

Я использую Symfony в качестве php framework.Я могу предложить вам больше информации, если вам это нужно.

Ответы [ 3 ]

16 голосов
/ 21 ноября 2010

Если передан объект / массив (который возвращает .serializeArray()), он сериализуется через $.param().

Если получена строка (которую возвращает .serialize()), она больше ничего не делает.

... поэтому они передаются так же, как и свойство data. Вы можете найти соответствующий чек здесь :

    // convert data if not already a string
    if ( s.data && s.processData && typeof s.data !== "string" ) {
        s.data = jQuery.param( s.data, s.traditional );
    }

Какой из них вы должны использовать? Это на самом деле здесь не имеет значения, .serialize() делает тот же $.param() вызов , поэтому они выполняют точно такой же объем работы. Я лично использую .serialize(), потому что просто набрать меньше.

5 голосов
/ 11 октября 2012

В этом случае они одинаковы. Но есть большая разница, если вы не укажете тип - serialize сделает GET, а serializeArray сделает POST!

0 голосов
/ 07 сентября 2012

Я заметил, что в CodeIgniter метод .serialize может создавать данные, которые загрязняются защитой CSRF CodeIgniter (CodeIgniter каким-то образом добавляет точки с запятой к ключам массива), тогда как формы, которые я отправлял с помощью .serializeArray, не делали этого. есть эта проблема.

Кроме того, если вы используете сложные имена POST, например, name = "some [a] [data] [structure]", где места в массиве $ _POST меняются и не являются произвольными, тогда использование .serialize, вероятно, будет намного проще, потому что вы можете преобразовать его обратно в структуру данных PHP гораздо больше легко.

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