2010-02-01 4 views
0

Я хочу получить данные из базы данных и назначить их выпадающему списку. Для этого я использую следующий JQuery в случае OnClickJson Value undefined при преобразовании datatable в 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();" /> 

Это WebMethod я использую для retreiving из базы данных, а также функция преобразования для преобразования DataTable в формате JSON. Он правильно возвращается. Но выход выходит как неопределенный. Я не могу исправить ошибку. Любая помощь?

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

как вам это исправить. Я столкнулся с той же проблемой. Все возвращается, но когда я пытаюсь получить доступ к значению, он говорит undefined. Оглядываясь, но если вы нашли исправление, не могли бы вы опубликовать его? – hangar18

ответ

0

Сначала я рекомендую вам использовать Ajax Enabled WCF service и не стройте к представлению данных JSon себя. Если вы не хотите использовать WCF, по крайней мере, используйте библиотеку JSON. Легко вернуть неверные данные json, если вы делаете это без надлежащей библиотеки.

Кроме того, почему вы используете response.d? Объект d возвращается службой Asp. Если вы не используете его, зачем его включать?

Наконец, проверьте с Firebug или другими средствами, что возвращенный json хорошо сформирован. Если есть сомнения, отправьте его здесь.

+0

Попытка с библиотекой от ajaxpro.com .. Там я получаю сообщение об ошибке, поскольку «Указанный метод не поддерживается», когда я использовал ((IJavaScriptConverter) новый AjaxPro.DataTableConverter()). TrySerializeValue (o, type, sb)) метод из эта библиотека .. – Nila

Смежные вопросы