2010-09-08 4 views
4

J'ai un formulaire présenté comme une feuille de calcul. Lorsque l'utilisateur quitte une ligne, je souhaite soumettre les champs de cette ligne au serveur à l'aide de jQuery Ajax. La page est une grande forme, donc ce n'est pas vraiment un javascript en cliquant sur le bouton soumettre le scénario - le formulaire est énorme et je veux seulement envoyer une petite partie du contenu pour des raisons de rapidité.Comment "soumettre" une partie d'un formulaire en utilisant jQuery

J'ai écrit le code qui identifie la ligne et itère à travers les champs de la ligne. Mon problème est comment construire l'objet dat afin de soumettre quelque chose de compréhensible que je peux désassembler et stocker à la fin du serveur.

Au moment mon code ressemble à ceci

var dat=[]; 
$("#" + finalrow).find("input").each(function() { 
    var o = $(this).attr("name"); 
    var v = $(this).val(); 
    dat.push({ o: v }); 
}); 
$.ajax({ 
    url: 'UpdateRowAjax', 
    dataType: 'json', 
    type: 'POST', 
    data: dat , 
    success: function (data) { 
     renderAjaxResponse(data); 
    } 
}); 

L'assemblage de dat ne fonctionne pas du tout. Alors, comment dois-je construire cet objet de données pour qu'il "ressemble" autant que possible à une soumission de formulaire.

Répondre

7

Vous pouvez ajouter les éléments contenant les données que vous souhaitez envoyer à une collection jQuery, puis appeler la méthode serialize sur cet objet. Il renverra une chaîne de paramètres que vous pouvez envoyer au serveur.

paramètre
var params = $("#" + finalrow).find("input").serialize(); 

$.ajax({ 
    url: 'UpdateRowAjax', 
    type: 'POST', 
    data: params , 
    success: function (data) { 
     renderAjaxResponse(data); 
    } 
}); 
+0

Merci pour votre réponse rapide. Le site jQuery semble être en panne et je n'ai pas encore utilisé la collection (je suppose que c'est le plugin dont vous parlez) mais l'approche de karim79 est tout ce dont j'ai besoin pour cela. – Andiih

+0

@Andiih: Tous les objets jQuery sont en fait des collections. Un objet jQuery est une collection de zéro ou plusieurs éléments. '$ (" # "+ finalrow) .find (" input ")' est une collection d'éléments correspondant au sélecteur et à l'appel 'find' additionnel. Lorsque vous appelez serialize, il crée une chaîne de paramètres pour tous les éléments éligibles de cette collection. Il est inclus dans le noyau jQuery, aucun d'entre eux nécessite un plugin. –

+0

merci pour la clarification qui fonctionne en effet parfaitement! – Andiih

2

$.ajax « data » attend à une carte de paires clé/valeur (ou une chaîne), plutôt que d'un tableau d'objets. Essayez ceci:

var dat = {}; 
$("#" + finalrow).find("input").each(function() { 
    dat[$(this).attr('name')] = $(this).val(); 
}); 
+0

Au début, je pensais que cela fonctionnait, mais en fait, bien que dat semble plausible une fois assemblé, les serveurs forment une collection vide. – Andiih

3

Vous pouvez utiliser $.param() pour sérialiser une liste d'éléments. Par exemple, dans votre code:

var dat= $.param($("input", "#finalrow")); 
$.ajax({ 
    url: 'UpdateRowAjax', 
    dataType: 'json', 
    type: 'POST', 
    data: dat , 
    success: function (data) { 
     renderAjaxResponse(data); 
    } 
}); 

Exemple de .param $(): http://jsfiddle.net/2nsTr/

serialize() cartes à cette fonction, afin d'appeler cette façon devrait être un peu plus efficace.

+0

Merci. Très cool et un exemple vivant utile. Je vais utiliser la solution de karim79 comme conceptuellement plus simple mais j'apprécie vraiment votre contribution. – Andiih

Questions connexes