“走”JSON响应并填充表单字段 - 更有效的方法?

时间:2009-03-11 17:31:23

标签: jquery json

我知道有一种更优雅/更有效的方法(在php中我会使用foreach)但是使用jQuery我如何走JSON响应的var / val对并填充具有相同id的表单字段JSON响应中的字段名称?

这是我的JSON回复:

[{"field":"svendor_name","value":"Vendor Name Inc."},{"field":"svendor_addr1","value":"1234 Vendor Lane."},{"field":"svendor_addr2","value":"Suite 100"},{"field":"svendor_city"
,"value":"Vendorville"},{"field":"svendor_state","value":"CA"},{"field":"svendor_zip","value":"90210"},{"field"
:"svendor_phone","value":"800-555-1234"}]

这是我用于填充表单的jQuery代码:

$(document).ready(function()
{
    $('#svendor_name').bind("change", function()
    {
        var svendor = $("#svendor_name").val();
        svendor = svendor.replace(/&/g, '*');
        $.getJSON("get_vendors.php?sname=" + svendor,
        function(data)
        {
            $.each(data,
                function(i, item)
                {
                    if(item.field == "svendor_name")
                    {
                        $("#svendor_name").val(item.value);
                    }
                    else if(item.field == "svendor_addr1")
                    {
                        $("#svendor_addr1").val(item.value);
                    }
                    else if(item.field == "svendor_addr2")
                    {
                        $("#svendor_addr2").val(item.value);
                    }
                    else if(item.field == "svendor_city")
                    {
                        $("#svendor_city").val(item.value);
                    }
                    else if(item.field == "svendor_state")
                    {
                        $("#svendor_state").val(item.value);
                    }
                    else if(item.field == "svendor_zip")
                    {
                        $("#svendor_zip").val(item.value);
                    }
                    else if(item.field == "svendor_phone")
                    {
                        $("#svendor_phone").val(item.value);
                    }
                    else if(item.field == "svendor_id")
                    {
                        $("#svendor_id").val(item.value);
                    }
            });
        });
    });
});

一切正常但很好但我真的想避免所有的if / else语句,只是使用从getJSON方法返回的数据来确定哪些字段用什么值填充。什么是更清洁/更有效的方法?

- 尼古拉斯

4 个答案:

答案 0 :(得分:21)

您可以通过将$ .each替换为:

来删除所有“if”语句
$.each(data, function(i, item){
  $("#"+item.field).val(item.value);
});

答案 1 :(得分:7)

这有什么问题?

$.each(data,
    function(i, item) {
        $("#" + item.field).val(item.value);
    }
});

答案 2 :(得分:3)

如果您的搜索结果如下:

[{"field1":"value1","field2":"value2"}]

然后Seb和Chetan提供的代码

$.each(data, function(i, item){
  $("#"+item.field).val(item.value);
});

如果您的搜索结果如下:

{"field1":"value1","field2":"value2"}

然后使用此代码

$.each(data, function(field, value){
  $("#"+field).val(value);
});

答案 3 :(得分:0)

我注意到元素ID与JSON中的字段相同,如何:

$(document).ready(function() {
    $('#svendor_name').bind("change", function()
    {
        var svendor = $("#svendor_name").val();
        svendor = svendor.replace(/&/g, '*');
        $.getJSON("get_vendors.php?sname=" + svendor,
        function(data) {
                $.each(data, function(i, item) {
                    $('#' + item.field).val(item.value);
                });
        });
    });
});