2010-10-15 5 views
1

J'ai une sélection qui permet à l'utilisateur de sélectionner plusieurs options. Aussi sur la même page est un formulaire qui permettra à l'utilisateur d'ajouter de nouveaux mots-clés qui apparaîtront dans la sélection. Mon javascript envoie une requête ajax à un script php qui renvoie un message de réussite ou d'erreur qui est ensuite ajouté au dom.Repopulation sélectionner après demande ajax

La partie ajax du script ressemble à ceci

$.post(
     metadataAction, 
     { 
      dateOfUpdate:dateOfUpdateVal, 
      metadataStandardName:metadataStandardNameVal, 
      metadataLanguage:metadataLanguageVal 
     }, 
     function(responseText) { 
      $('body').append(responseText); 
     }, 
     "html" 
); 

Je veux seulement repeupler les options quand un nouveau mot-clé a été ajouté avec succès.

Est-ce que quelqu'un a des suggestions sur la meilleure façon d'y parvenir?

Merci pour toute aide.

Répondre

0
$.post(
     metadataAction, 
     { 
      dateOfUpdate:dateOfUpdateVal, 
      metadataStandardName:metadataStandardNameVal, 
      metadataLanguage:metadataLanguageVal 
     }, 
     function(responseText) { 
      $('body').append(responseText); 
      $('#select_id').append('<option>'+responseText+'</option>'); 
     }, 
     "html" 
); 
0

semble un peu étrange que vous apposent le message au corps, mais de toute façon ..

retour une chaîne JSON représentant un objet avec deux propriétés: succès [bool], le message [chaîne]
n'ont pas d'expérience avec php, mais si la réponse sera de type JSON, puis jQuery (1.4.2) analysera comme un objet, puis dans votre fonction de succès:

function(data) 
{ 
    if(data.success) 
    { 
    //append the item 
    } 
    //show the message 
    $(msgCont).text(data.message) 
} 

note que vous arrivera toujours à la fonction de réussite si le code d'état de réponse est 200 (ou tout autre 2XX)

+0

Merci pour votre suggestion. La réponse qui est ajoutée est un div de positon fixe qui est ensuite effacé après quelques secondes, donc l'ajouter au corps est logique. J'aime l'idée de retourner un objet JSON. Je pourrais alors également inclure les options mises à jour pour mettre à jour le select. Merci – ianckc

+0

si un utilisateur ajoute beaucoup d'éléments, vous pouvez avoir le div positionné fixe déjà caché sur la page, et il suffit de changer son texte et de le cacher après chaque opération. c'est une façon plus simple de gérer votre cas puisque vous ne voulez pas renvoyer une chaîne json qui contient aussi des balises html brutes (+ plus d'octets à transférer .. mais c'est vraiment très compliqué ;-)) –

0

Pour résoudre ce problème, le script php sort un objet json.

Si l'addition a réussi, le json a trois propriétés.

Succès, message et nouveauSélection. Je vérifie l'occurrence du succès dans ma réponse ajax. S'il est présent j'utilise la méthode jquery replaceWith() pour mettre à jour le select actuellement dans le formulaire avec celui retourné.

Merci pour l'aide.