2009-03-11 8 views
6

Sé que hay una forma mucho más elegante/eficiente de hacerlo (en php usaría foreach) pero con jQuery, ¿cómo puedo recorrer los pares var/val de una respuesta JSON y rellenar campos de formulario con los mismos id que nombres de campo en la respuesta JSON?"Walk" respuesta JSON y rellenar campos de formulario: ¿un enfoque más eficiente?

aquí está mi respuesta 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"}] 

Aquí está mi código jQuery para rellenar el formulario:

$(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); 
        } 
      }); 
     }); 
    }); 
}); 

que todo trabaja muy bien y bueno, pero realmente quieren evitar todo el if/las declaraciones else y simplemente usan los datos que regresan del método getJSON para determinar qué campos se llenan con qué valores. ¿Cuál es un enfoque más limpio/más eficaz para esto?

- Nicholas

Respuesta

21

Usted puede deshacerse de todos "if" mediante la sustitución de sus $ .Cada con esto:

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

Excelente respuesta. Funciona perfectamente y es exactamente lo que estaba buscando. Gracias. –

+8

Esto funciona bien siempre y cuando todos los campos sean campos de entrada. ¿Pero qué pasa con los cuadros combinados, las casillas de verificación y los botones de radio? ¿No hay un buen complemento que se encargue de esto? – bart

+0

Me pregunto lo mismo que Bart. –

7

Qué hay de malo en esto?

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

No se comporta bien para casillas de verificación y botones de opción –

0

me di cuenta de que los ID de los elementos son los mismos que los campos en su JSON, ¿qué tal:

$(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); 
       }); 
     }); 
    }); 
}); 
3

Si los resultados se ve así:

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

A continuación, el código proporcionado por Seb y Chetan trabaja

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

Si los resultados se ve así:

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

A continuación, utilice el código

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

Demasiado bueno para una respuesta en campos directos –

Cuestiones relacionadas