2010-08-04 5 views
1

J'ai une configuration jqGrid pour poster une URL en utilisant le type de contenu d'application/JSON:jqGrid appeler WebService (asmx) en utilisant JSON

$("#jqCategoryGrid").jqGrid({ 
    datatype: "json", 
    mtype: 'POST',   
    url: "Webservices/TroubleTicketCategory.asmx/getCategoryData", 
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
    // **UPDATE - This is the fix, as per Oleg's response** 
    serializeGridData: function (postData) { 
     if (postData.searchField === undefined) postData.searchField = null; 
     if (postData.searchString === undefined) postData.searchString = null; 
     if (postData.searchOper === undefined) postData.searchOper = null; 
     //if (postData.filters === undefined) postData.filters = null; 
     return JSON.stringify(postData); 
    }, 
}); 

Le problème est que le jqGrid essaie toujours de passer paramètres utilisant un format non-json donc j'obtiens une erreur "Primitive JSON invalide"

Existe-t-il un moyen d'ordonner à jqGrid de sérialiser les données en utilisant Json?

Merci

MISE À JOUR

J'ai modifié le code source fourni dans ma question d'inclure le correctif je, qui est venu de la réponse Oleg ci-dessous.

Répondre

2

Vous devez inclure sérialisation JSON des données affichées par exemple en ce qui concerne des json2.js qui peuvent être téléchargés à partir http://www.json.org/js.html:

serializeRowData: function (data) { return JSON.stringify(data); } 
+0

Comment puis-je faire? De tout ce que je peux voir, le jqGrid est en boîte noire et gère toutes les sérialisations de données en arrière-plan. Y at-il une méthode ou une propriété ou quelque chose que je peux spécifier dans l'init de la grille qui lui demande de le faire? – bugfixr

+0

Je ne comprends pas votre question. Dans http://stackoverflow.com/questions/2675625/setting-the-content-type-of-requests-performed-by-jquery-jqgrid/2678731#2678731, j'ai montré un fragment de code de jqGrid qui utilise 'serializeRowData'. En ce qui concerne cette fonction, vous avez le contrôle complet sous les données envoyées au serveur. Vous avez comme 'data' un objet avec des données qui seront envoyées et vous pouvez convertir dans une chaîne comment vous voulez sans restrictions. De plus, le code complet de jqGrid vous permet de télécharger gratuitement et d'étudier d'autres fonctionnalités. Ce n'est donc pas une boîte noire. C'est une boîte ouverte que je vois. – Oleg

+0

L'URL référencée que vous avez envoyée contient la réponse. Je mettrai à jour mon message pour refléter cela. Une autre question - existe-t-il un moyen d'obtenir l'édition de mon formulaire pour sérialiser les données? Il ne semble pas utiliser le même "serializeGridData" que la méthode de chargement principale utilise. – bugfixr