如何通过jquery挂钩json对html表单的响应?

时间:2009-10-05 13:57:02

标签: jquery ajax json forms

我确定我只是遗漏了一些东西,但如果有人知道如何在不调用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,我想填写上面的表格。不仅是值,还有它是只读的,输入的类,以及它是否被禁用。

所以服务器将以json格式将所有这些返回给ajax函数,它应该类似于:

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

是否有一种简单的方法让jquery遍历每个顶级对象,将它与具有相应ID的DOM元素绑定,然后将所有子对象设置为该ID的属性?

很抱歉,如果这是一个明智的选择。我找不到在主jquery页面中处理json的正确方法。

3 个答案:

答案 0 :(得分:2)

for(var element in json){
    for(var attribute in json[element]){
        $('#' + element).attr(attribute, json[element][attribute]);
    }
}

答案 1 :(得分:1)

您不需要任何插件:

$.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");

Matt's answer是正确的,我误读了json回复。这是一个更简单的处理程序,因为它只考虑元素的文本值。

答案 2 :(得分:0)

这个怎么样?

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循环:

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]);
    });
});