Как получить доступ к сериализованным данным jQuery?

как я могу получить доступ к данным, который был сериализован с помощью функции jQuery?

var test = $("form").serialize();

у меня есть эти данные...

url=hello+1&title=hello+1&content=abc

как я могу получить значение 'URL-адрес'? - Я пробовал...

console.log(test.url); 

но я undefined - Я хочу получить результат как "hello+1"

3 ответов


метод serialize создает только строку, закодированную URL-адресом, из формы, но это строка i.e вы не можете получить значение url или любое другое значение. Для этого вам нужно проанализировать обратно строку в объект. Вы можете проверить библиотеку:https://github.com/kflorence/jquery-deserialize

однако было бы лучше, если бы вы просто выбрали поле, содержащее это значение, и получили его оттуда, т. е.

jQuery('input[name="url"]').val();

или если у вас есть id или класс на этом поля, вы можете использовать его в качестве селектора.

P. S. В значение url "Привет 1" в + это просто как пробелы кодируются в строках запроса.


на serialize() метод предназначен для создания строки с кодировкой URL, обычно используемой для запросов AJAX к серверу. Это означает, что вы не можете получить доступ к строке как к объекту или массиву в традиционном смысле, вместо этого у вас есть два варианта достижения желаемого результата...

(этот вопрос может быть старым, но оригинальные ответы на самом деле не отвечают на первоначальный вопрос и не дают много объяснений...)

Способ 1 : Сериализовать Массив

первый метод и мой предпочтительный, чтобы использовать serializeArray() метод, это может быть полезным методом, если у вас есть несколько значений и вы хотите получить значение каждого, а не явно выбирать каждый элемент, чтобы получить там значение.

решение, как показано ниже, с помощью этого метода сериализует выбранную форму или элемент в массив объектов, которые затем могут быть помещены в один объект и легко доступны с помощью функции для получите значения, когда и где они вам нужны в вашем скрипте...

//Serialize the Form
var values = {};
$.each($("form").serializeArray(), function (i, field) {
    values[field.name] = field.value;
});

//Value Retrieval Function
var getValue = function (valueName) {
    return values[valueName];
};

//Retrieve the Values
var url = getValue("url");

здесь JSFiddle Фрагмент Кода...

$(document).ready(function () {
    var values = {};

    $.each($("form").serializeArray(), function (i, field) {
        values[field.name] = field.value;
    });

    var getValue = function (valueName) {
        return values[valueName];
    };

    var first = getValue("FirstName");
    var last = getValue("LastName");

    $("#results").append(first + " & ");
    $("#results").append(last);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

<form action="">
    First name:
    <input type="text" name="FirstName" value="Foo" />
    <br>Last name:
    <input type="text" name="LastName" value="Bar" />
    <br>
</form>
        
<div id="results"></div>

Метод 2: Значение Элемента

второй метод, как уже упоминалось, заключается в том, чтобы просто получить значение непосредственно из элемента формы, который вы пытаетесь собрать, а не сериализовать значение. Это можно просто достичь с помощью jQuery val() метод - это будет введенное значение селектора.

хотя этот метод прост для выбора одного элемента, он может быстро стать беспорядочным при попытке выбрать и получить значение нескольких элементов из формы...

$("input").val();

serialize() функция возвращает строку, поэтому вы не можете использовать ее как объект.

для десериализации строки можно использовать jQuery BBQ $.deparam() функция:

Вы можете найти пример и документация здесь

здесь исходный код