2014-08-31 44 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

相關問題