Подтвердить что ты не робот

Почему serialize() имеет тот же эффект, что и serializeArray() при настройке данных post для jQuery.ajax()?

У меня есть этот код 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(), он также работает так же.

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

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

4b9b3361

Ответ 1

Если передается объект/массив (который возвращается .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(), потому что это просто не нужно печатать.

Ответ 2

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

Ответ 3

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

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