Как перехватить ответ json на html форму через jquery? - PullRequest
1 голос
/ 05 октября 2009

Я уверен, что просто что-то упустил, но было бы очень полезно, если бы кто-нибудь знал, как это сделать, не вызывая плагин jquery.

Предположим, у меня есть простая HTML-форма, подобная следующей:

<form id="mainform" action="form.php" method="post">
    <fieldset>
    <legend>Main Form</legend>
        <label for="input1">First Input</label>
        <input id="input1" name="input1" type="text" />
        <label for="input2">First Input</label>
        <input id="input2" name="input2" type="text" />
    </fieldset>
</form>

И у меня есть функция ajax через jquery, которую я хочу заполнить вышеупомянутой формой. Не только значения, но и то, является ли он доступным только для чтения, класс ввода и отключен ли он.

Итак, сервер вернет все это функции ajax в формате json, которая должна выглядеть примерно так:

{"input1":{"value":10},"input2":{"value":100,"readonly":"readonly","class":"noinput"}}

Есть ли простой способ заставить jquery проходить через каждый объект верхнего уровня, привязывать его к элементу DOM с соответствующим идентификатором, а затем устанавливать все подчиненные объекты в качестве атрибутов для этого идентификатора?

Извините, если это не сложно. Я не могу найти правильный способ работы с json на основных страницах jquery.

Ответы [ 3 ]

2 голосов
/ 05 октября 2009
for(var element in json){
    for(var attribute in json[element]){
        $('#' + element).attr(attribute, json[element][attribute]);
    }
}
1 голос
/ 05 октября 2009

Вам не нужно никаких плагинов:

$.post("/page/",
    "",
    function(json){
        try{

        //relevant part
        for(element in json){
            $(element).val(json[element]);
        }
        //end of relevant part

        }catch(e){alert(e.description);}
    }, "json");

Ответ Мэтта правильный, я неправильно понял ответ json Это более простой обработчик, поскольку он учитывает только текстовые значения элементов.

0 голосов
/ 05 октября 2009

Как насчет этого?

jQuery.each(jsonObject, function(input_idx, input_val)
{
    var input = $('#' + input_idx);
    jQuery.each(input_val, function(attr_idx, attr_val)
    {
        input.attr(attr_idx, attr_val);
    });
});

Или вы можете просто использовать простые циклы:

for (var input_idx in jsonObject)
{
    var input_val = jsonObject[input_idx];
    var input = $('#' + input_idx);
    for (var attr_idx in input_val)
    {
        input.attr(attr_idx, input_val[attr_idx]);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...