Utiliser jquery pour re-remplir la forme avec les données JSON

j'ai un formulaire HTML, que je sauvegarde dans la base de données via ajax. Pour obtenir la chaîne de requête de paires clé/valeur, j'ai utilisé le très pratique serialize fonction, comme ceci:

var myData = $("form#form_id").serialize();
$.ajax({
    url: "my_save_script.php",
    type: "post",
    data: myData,
    success: function(msg){
        alert(msg);
    }
});

maintenant je veux charger un formulaire vide, et le remplir à nouveau avec les données de la base de données, qui est délivrée à partir d'un appel ajax comme une chaîne JSON. J'ai été capable d'obtenir un objet Javascript avec les bonnes paires clé/valeur comme ceci:

data = $.parseJSON(data);
data = data[0];

Quelle est la façon la plus simple, la plus élégante pour remplir à nouveau le formulaire?

gardez à l'esprit que les éléments d'entrée du formulaire sont le texte, la sélection, la case à cocher et la radio. Les noms des éléments d'entrée sont les mêmes que les noms des colonnes de base de données, et les clefs de l'paires clé/valeur dans le ci-dessus data objet. C'est pourquoi l' serialize fonctionne si bien pour moi

21
demandé sur jeffery_the_wind 2012-03-21 19:14:11

3 réponses

je dirais que la façon la plus facile serait quelque chose du genre:

// reset form values from json object
$.each(data, function(name, val){
    var $el = $('[name="'+name+'"]'),
        type = $el.attr('type');

    switch(type){
        case 'checkbox':
            $el.attr('checked', 'checked');
            break;
        case 'radio':
            $el.filter('[value="'+val+'"]').attr('checked', 'checked');
            break;
        default:
            $el.val(val);
    }
});

fondamentalement, les seuls qui sont bizarres sont les cases à cocher et les radios parce qu'ils ont besoin d'avoir leur propriété vérifiée, Eh bien, coché. Les radios sont un peu plus complexes que les cases à cocher car non seulement nous devons les vérifier, mais nous devons trouver la bonne à vérifier (en utilisant la valeur). Tout le reste (inputs, textareas, selectbox, etc.) devrait juste avoir sa valeur fixée à la un qui est retourné dans L'objet JSON.

jsfiddle:http://jsfiddle.net/2xdkt/

52
répondu Bryan B. 2012-04-16 21:29:15

Si les données[0] contient le nom du champ et de données[1] contient la valeur, alors vous pouvez faire ce qui suit:

Vous pouvez faire quelque chose comme cela pour les zones de texte:

$("[name="+data[0]+"]").val(data[1]);

Alors quelque chose comme ceci pour les sélections:

$("[name="+data[0]+"]").val(data[1]);

veuillez noter que les cases à cocher et les boutons radio ne sont numérotés que s'ils sont cochés.

donc quelque chose comme ceci pour les cases à cocher (avant jQuery 1.6+):

$("[name="+data[0]+"]").attr('checked','checked');

le bouton radio pourrait avoir besoin d'un travail supplémentaire en fonction de la façon dont vous différenciez entre les différents. (I. E. Id, valeur, etc..)

0
répondu evasilchenko 2012-03-21 16:02:24

je suggère que vous changiez la façon dont vous faites une requête ajax. Utiliser. post ()

$.post("my_save_script.php", {
         data: myData,
    }, function(data) {
        $.each(data, function(i, item){
            $("#"+item.field).val(item.value);
        });      
    }, 
"json");
-1
répondu Starx 2012-03-21 16:51:33