2015-02-11 76 views
0

我想从AJAX函数读取一些JSON数据。这里是我使用AJAX:为什么我不能使用我的JSON数据?

   $.ajax({ 
       type: 'POST', 
       cache: false, 
       url: 'Default.aspx/GetCoords', 
       data: "{}", 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function (data) { 
        var text = JSON.stringify(data); 
        $("#jsonData").html(text); 
        alert(text); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
       } 
      }); 

我也有到位的字符串化使用JSON.parse和对象返回undefined或根本没有。这是来自一个C#的功能,看起来像这样:

[WebMethod] 
    [ScriptMethod] 
    public static string GetCoords() 
    { 
     DataTable dt = new DataTable(); 
     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM DRAW ORDER BY DrawID DESC;", con)) 
      { 
       con.Open(); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       da.Fill(dt); 
       JavaScriptSerializer serializer = new JavaScriptSerializer(); 
       List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
       Dictionary<string, object> row; 
       foreach (DataRow dr in dt.Rows) 
       { 
        row = new Dictionary<string, object>(); 
        foreach (DataColumn col in dt.Columns) 
        { 
         row.Add(col.ColumnName, dr[col]); 
        } 
        rows.Add(row); 
       } 
       System.Diagnostics.Debug.WriteLine(serializer.Serialize(rows)); 
       return serializer.Serialize(rows);     
      } 
     } 
    } 

它返回JSON数据:这里是什么样子的调试器控制台,当我调用该函数在一个段落标签:

[{"DrawID":925,"xCoord":466,"yCoord":201},{"DrawID":924,"xCoord":385,"yCoord":318},{"DrawID":923,"xCoord":768,"yCoord":159},{"DrawID":922,"xCoord":543,"yCoord":214},{"DrawID":921,"xCoord":329,"yCoord":172}] 

然而,当我将其发送到段落标记在JQuery中或把它在一个HTML段落,这里是什么样子:

{"d":"[{\"DrawID\":925,\"xCoord\":466,\"yCoord\":201},{\"DrawID\":924,\"xCoord\":385,\"yCoord\":318},{\"DrawID\":923,\"xCoord\":768,\"yCoord\":159},{\"DrawID\":922,\"xCoord\":543,\"yCoord\":214},{\"DrawID\":921,\"xCoord\":329,\"yCoord\":172}]"} 

我有两个问题: (1)为什么我无法使用这些数据将xCoords和yCoords插入到画布中?我尝试了很多格式:(data.d [0] .xCoord,d [0] .xCoord,text.d [0] .xCoord,text [0] .xCoord等等)。 (2)上面的第二种格式是否会在试图提取用于在画布上绘画的数据时出现问题(这是我想知道的反斜杠)?

谢谢。

+1

你为什么要返回字符串?如果你将返回行可以更容易。 – lujcon 2015-02-11 20:23:33

+0

在您的文档准备好之前,您的Ajax调用可能会返回。确保你在$(document).ready(/ * here8 /)中调用了ajax函数,以确保你的'#jsonData'在你尝试显示它时可用。 – 2015-02-11 20:25:07

+0

你可以给我一个例子@lujcon? – btalbot 2015-02-11 20:26:42

回答

2

在你的成功的功能,你不字符串化或json.Parse的“数据”变量,而是data.d变量。 'd'是您需要解析的json返回的成员。

因此,改变var text = JSON.stringify(data);var text = JSON.stringify(data.d);,你应该是金。

+1

这与@lujcon答案的C#答案一起解决了我的问题。我已经创建了一个社区维基答案,结合他和你的答案。谢谢。 Upvoted。 – btalbot 2015-02-11 20:58:28

1

您需要使用parseJSON,因为这样的:

myThing = {"d":"[{\"DrawID\":925,\"xCoord\":466,\"yCoord\":201},{\"DrawID\":924,\"xCoord\":385,\"yCoord\":318},{\"DrawID\":923,\"xCoord\":768,\"yCoord\":159},{\"DrawID\":922,\"xCoord\":543,\"yCoord\":214},{\"DrawID\":921,\"xCoord\":329,\"yCoord\":172}]"}; 

myJSON = $.parseJSON(myThing.d); 
alert (myJSON[0].DrawID); //etc 
0
[WebMethod] 
[ScriptMethod] 
public static Dictionary<string, object>[] GetCoords() 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM DRAW ORDER BY DrawID DESC;", con)) 
     { 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(dt); 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
      Dictionary<string, object> row; 
      foreach (DataRow dr in dt.Rows) 
      { 
       row = new Dictionary<string, object>(); 
       foreach (DataColumn col in dt.Columns) 
       { 
        row.Add(col.ColumnName, dr[col]); 
       } 
       rows.Add(row); 
      } 
      System.Diagnostics.Debug.WriteLine(serializer.Serialize(rows)); 
      return rows.ToArray();     
     } 
    } 
} 

的Java脚本:

  $.ajax({ 
      type: 'POST', 
      cache: false, 
      url: 'Default.aspx/GetCoords', 
      data: "{}", 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (data) { 

       $.each(data, function(index, value) { 
        var x = value.xCoord; 
        /// do something with it ;) 
       }); 
       var text = JSON.stringify(data); 
       $("#jsonData").html(text); 
       alert(text); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert(xhr.status); 
       alert(thrownError); 
      } 
     }); 
+0

这实际上已将JSON正确地格式化为我的Javascript,但我仍然无法对数据执行任何操作 - 我无法提取类似alert(text.d [0] .xCoord)的内容; – btalbot 2015-02-11 20:45:31

+0

??什么数据你回来? – lujcon 2015-02-11 20:47:34

+0

我不知道谁低估了这一点,但它不值得。它实际上帮助使JSON返回,所以我可以正确地将它变成一个Javascript变量。我快到了。 – btalbot 2015-02-11 20:47:51

0

我必须在我的C#代码@lujcon返回行说:

[WebMethod] 
[ScriptMethod] 
public static List<Dictionary<string, object>> GetCoords() 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM DRAW ORDER BY DrawID DESC;", con)) 
     { 
      con.Open(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(dt); 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
      Dictionary<string, object> row; 
      foreach (DataRow dr in dt.Rows) 
      { 
       row = new Dictionary<string, object>(); 
       foreach (DataColumn col in dt.Columns) 
       { 
        row.Add(col.ColumnName, dr[col]); 
       } 
       rows.Add(row); 
      } 
      System.Diagnostics.Debug.WriteLine(serializer.Serialize(rows)); 
      return rows;     
     } 
    } 
} 

然后,我有我的var text = JSON.stringify(data);改变变种文字= JSON.stringify(data.d);正如@JustinRusso所说。现在工作。感谢大家。

相关问题