2010-02-01 5 views
0

Je souhaite récupérer les données de la base de données et les affecter à la liste déroulante. Pour que j'utilise le jquery suivant dans l'événement onclickJson Valeur non définie lors de la conversion de données au format json

function getcountry() { 
       try { 

        $.ajax({ 
        type: "POST", 
         url: "/JsonWebServiceWithJQuery/jsonwebservice.asmx/getcountry", 
         data: "{}", 
         contentType: "application/json;charset=utf-8", 
         success: ajaxCallSucceed, 
         datatype: "json", 
         failure: ajaxCallFailed 
        }); 
       } 
       catch (e) { 
        alert("Failed calling webservice" + e); 
       } 
      } 
      function ajaxCallSucceed(response) { 
       alert("Success"); 
       alert(response.d); 
      } 
      function ajaxCallFailed(error) { 
       alert("I'm failed"); 
       alert('error: ' + error); 
      } 



    <input type="button" value="Get All Users" onclick="getcountry();" /> 

C'est le webmethod J'utilise pour retreiving la base de données et également une fonction de conversion pour convertir datatable en format JSON. Il récupère correctement. Mais, la sortie vient comme indéfinie. Je ne peux pas réparer le bug .. Toute aide?

public static string CreateJsonParameters(DataTable dt) 
     { 
      StringBuilder JsonString = new StringBuilder(); 

      //Exception Handling   

      if (dt != null && dt.Rows.Count > 0) 
      { 
       JsonString.Append("[ "); 
       JsonString.Append("{ "); 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        JsonString.Append("{ "); 
        for (int j = 0; j < dt.Columns.Count; j++) 
        { 
         if (j < dt.Columns.Count - 1) 
         { 
          JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\","); 
         } 
         else if (j == dt.Columns.Count - 1) 
         { 
          JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\""); 
         } 
        } 

        /*end Of String*/ 

        if (i == dt.Rows.Count - 1) 
        { 
         JsonString.Append("} "); 
        } 

        else 
        { 
         JsonString.Append("}, "); 
        } 
       } 
       JsonString.Append("}]"); 
       return JsonString.ToString(); 
      } 
      else 
      { 
       return null; 
      } 
     } 

    public static string getcountry() 
     { 
      country c = default(country); 
      List<country> cntrylist = new List<country>(); 
      DataTable dt = new DataTable("table1"); 
      using (SqlConnection connection = new SqlConnection(connectionstring)) 
      { 

       using (SqlDataAdapter da = new SqlDataAdapter("getcountry", connection)) 
       { 
        da.SelectCommand.CommandType = CommandType.StoredProcedure; 
        da.Fill(dt); 
        connection.Close(); 
        string s = CreateJsonParameters(dt); 
        return s; 
       } 
      } 
     } 
+0

Comment avez-vous résolu cela. Je suis confronté au même problème. Tout revient, mais quand j'essaie d'accéder à la valeur, ça dit indéfini. En regardant autour de vous, mais si vous avez trouvé la solution, pourriez-vous l'afficher? – hangar18

Répondre

0

Au début, je vous recommandons d'utiliser un Ajax Enabled WCF service et non construire les données JSON vous. Si vous ne voulez pas utiliser WCF, utilisez au moins une bibliothèque JSON. Il est facile de retourner des données json malformées si vous le faites sans une bibliothèque appropriée.

En outre, pourquoi utilisez-vous response.d? L'objet d est renvoyé par un service Asp. Si vous n'en utilisez pas, pourquoi l'inclure? Enfin, vérifiez avec Firebug ou d'autres moyens que le json retourné est bien formé. En cas de doute, postez-le ici.

+0

Essayer avec la bibliothèque de ajaxpro.com .. Là, je reçois l'erreur comme "méthode spécifiée n'est pas supportée" quand j'ai utilisé ((IJavaScriptConverter) nouvelle AjaxPro.DataTableConverter()). TrySerializeValue (o, type, sb)) la méthode de cette bibliothèque .. – Nila

Questions connexes