2014-08-31 43 views
0

所以即时通讯尝试通过JQuery Ajax调用返回DataTable到web服务,但不断收到错误,返回的JSON格式不正确。当我将字符串传递给验证器时,它说它很好,任何人都知道我会在哪里出错? 我的代码如下:SyntaxError:JSON.parse:JSON数据的第3行第1列的意外字符

var params = new Object(); 
     params.centreId = 0; 
     params.brcWeek = 0; 
     params.brcMonth = 0; 
     params.brcYear = 0; 
     params.weekOffSet = 0; 

     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "/Webservice/LloydsService/getLloydsOverview", 
      data: JSON.stringify(params), 
      dataType: "json", 
      success: function (data) { 
       console.debug("data received Ok?"); 
       console.log(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(textStatus + " -- " + "---" + errorThrown); 
      } 
     }); 

Web服务:

<WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
Public Function getLloydsOverview(ByVal centreId As Integer, ByVal brcWeek As Integer, ByVal brcMonth As Integer, ByVal brcYear As Integer, ByVal weekOffSet As Integer) As String 
    Dim dt As New DataTable() 
    Dim serializer As JavaScriptSerializer = New JavaScriptSerializer() 

    Using conn As SqlClient.SqlConnection = GetDBConnection() 
     Using cmd As SqlClient.SqlCommand = conn.CreateCommand 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.CommandText = "sp_LloydsDashboard_Overview" 
      cmd.Parameters.AddWithValue("@CentreId", centreId) 
      cmd.Parameters.AddWithValue("@BRCWeek", brcWeek) 
      cmd.Parameters.AddWithValue("@BRCMonth", brcMonth) 
      cmd.Parameters.AddWithValue("@BRCYear", brcYear) 
      cmd.Parameters.AddWithValue("@WeekOffSet", weekOffSet) 
      Using DA As New SqlDataAdapter(cmd) 
       conn.Open() 
       DA.Fill(dt) 
       Dim rows As New List(Of Dictionary(Of String, Object))() 
       Dim row As Dictionary(Of String, Object) 
       For Each dr As DataRow In dt.Rows 
        row = New Dictionary(Of String, Object)() 
        For Each col As DataColumn In dt.Columns 
         row.Add(col.ColumnName, dr(col)) 
        Next 
        rows.Add(row) 
       Next 
       Dim json As String = serializer.Serialize(rows) 
       Return json 
      End Using 
     End Using 
    End Using 
End Function 

返回这个(这验证):

[{"WalkedPast":1000,"PeelOff":0.1,"WalkedIn":100}] 

,但我仍然得到错误语法错误:JSON.parse: JSON数据第3行第1列的意外字符。

任何任何想法?

+0

摘掉“网络服务”。这不相关。 – 2014-08-31 13:35:41

+0

究竟是什么给你的语法错误? Web服务或JavaScript处理响应(听起来像是后者,但明确无误)?处理JSON的代码行是抛出错误? – Quentin 2014-08-31 13:37:07

+0

来自ajax调用的响应直接返回错误 - errorthrown显示带有错误引发测试的警报框SyntaxError:JSON.parse:JSON数据第3行第1列的意外字符 – 2014-08-31 13:41:58

回答

-1

不字符串化(假定params已经是JSON)

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "/Webservice/LloydsService/getLloydsOverview", 
      data: params, 
      dataType: "json", 
      success: function (data) { 
       console.debug("data received Ok?"); 
       console.log(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(textStatus + " -- " + "---" + errorThrown); 
      } 
     }); 

小提琴here,看看控制台。

+0

'params'是**不是** JSON。它是一个JavaScript对象。如果OP遵循你的建议,那么jQuery会自动编码它,但作为表单数据,而不是JSON !. – Quentin 2014-08-31 13:39:06

+0

...因此,jQuery在内部将其字符串化。否则,它会在json中发布一个导致错误的字符串。感谢无条件批准 – 2014-08-31 13:42:53

+0

如何发送表单数据而不是JSON解决了JSON解析器抛出错误的问题? – Quentin 2014-08-31 13:43:47

相关问题