2010-12-08 5 views
1

J'essaie de remplir un formulaire de recherche jqGrid en utilisant un élément SELECT. Dans le colModel pour la colonne intéressé je

searchoptions: { 
    dataUrl: '<%: Url.Content("~/Contact/GetCustomers") %>', 
    buildSelect: function (response) { 
     var theSelect = "<select>"; 
     $.each(response, function (i, data) { 
      theSelect += '<option value="' + data.Value + '">' + data.Text + '</option'; 
     }); 
     theSelect += "</select>"; 
    }, 
    sopt: ['eq', 'ne'] 
} 

la GetCustomers méthode à distance renvoient un résultat JSON formaté comme

[{"Selected":false,"Text":"David Gilmour","Value":"10"}, 
{"Selected":false,"Text":"Eric Clapton","Value":"26961"}, 
{"Selected":false,"Text":"Joan Baetz","Value":"26972"}] 

mais avec le code que j'utiliser pour chaque fonction que je reçois ce qui suit erreur

alt text

+0

Quelle est la valeur 'response' transmise? Pouvez-vous nous montrer à quoi cela ressemble dans votre débogueur? –

+0

il est dit '[object XMLhttpRequest]' – Lorenzo

Répondre

1

Depuis (selon votre commentaire ci-dessus) vous obtenez l'objet XMLHttpRequest, vous devez analyser le texte de réponse. Ou modifiez le code qui transmet la réponse pour transmettre uniquement le texte de la réponse ou le résultat analysé.

+0

@patrick_dw: super! Merci beaucoup! – Lorenzo

0

-vous cet objet analyse pas JSON afin que vous puissiez le lire comme un objet propre JS réelle?

Étant donné que vous renvoyez un tableau d'objets JSON, vous devrez peut-être analyser chaque objet individuellement pendant que vous effectuez une itération.

0

Je voudrais essayer d'utiliser $(this) à l'intérieur de chaque fonction. Bien qu'il semble juste, quelque chose peut être louche avec le résultat. Alternativement, vous pouvez utiliser un for (var d in data) (je pense) pour itérer sur un JSON.

1

réponse est juste une chaîne, il doit être analysé en utilisant quelque chose comme json2.js

var data = JSON.parse(response); 
+0

Ou utilisez la méthode [parseJSON] de jQuery (http://api.jquery.com/jQuery.parseJSON/). – jball

1

Regardez the close answer. Il me semble que vous devriez modifier le code un peu:

buildSelect: function(data) { 
    var response = jQuery.parseJSON(data.responseText); 
    var s = '<select>'; 
    if (response && response.length) { 
     for (var i = 0, l=response.length; i<l ; i++) { 
      var ri = response[i]; 
      s += '<option value="' + ri.Value + 
       (ri.Selected ? '" selected="selected">': '">') + 
       ri.Text + '</option>'; 
     } 
    } 
    return s + "</select>"; 
} 
+0

beaucoup. Cela fonctionnera aussi bien. Le problème était en utilisant 'parseJSON (response.responseText);' comme indiqué par @patrick_dw et même présent dans votre réponse. Après cette modification, le bloc '$ .each' dans mon code fonctionne bien et est plus compact. Merci beaucoup! – Lorenzo

+0

@Lorenzo: Bienvenue! Le plus important est que votre problème soit résolu. Pour dire la vérité je préfère écrire des réponses à jqgrid et pas sur des questions d'interface utilisateur jQuery/jQuery pure parce que j'écris/type prity lent. :-) – Oleg

+0

Je sais ce que tu veux dire. Pour moi vous êtes la référence maximale sur jqGrid !! :) – Lorenzo