c# /数据表错误使用JsonWriter:无效的JSON原语:draw
本文关键字:无效 原语 draw JSON JsonWriter 数据表 错误 | 更新日期: 2023-09-27 18:09:51
我的数据表有问题。我得到一个错误:"无效的JSON原语:绘制。"当我试图从我的web服务返回JSON。非常确定返回的JSON格式不正确,但我不确定如何纠正它。
Javascript: $(document).ready(function () {
var dt = $('#example').DataTable({
processing: true,
serverSide: true,
pagingType: 'full_numbers',
ajax: {
url: 'http://localhost:49317/WebService2.asmx/GetTableData',
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
dataSrc: 'data'
},
columns: [
{ data: 0 },
{ data: 1 },
{ data: 2 },
{ data: 3 },
{ data: 4 }
],
order: [[1, 'asc']]
});
HTML: <div>
<table id="example" class="table table-striped table-bordered" cellspacing="0" cellpadding="2" width="100%">
<thead>
<tr>
<th>Job</th>
<th>Customer</th>
<th>Planner</th>
<th>Description</th>
<th>SO</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
后台代码:using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Data;
using System.Data.OleDb;
using Newtonsoft.Json;
using System.IO;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService2 : System.Web.Services.WebService
{
public class JQDTParams
{
public string draw { get; set; }
}
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet =false)]
public string GetTableData(JQDTParams param)
{
var sortOrder = "asc";
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=|DataDirectory|ProductionDataCopy.mdb";
DataTable results = new DataTable();
using (OleDbConnection conn = new OleDbConnection(connString))
{
OleDbCommand cmd = new OleDbCommand("SELECT * FROM ProductionData", conn);
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
adapter.Fill(results);
}
IEnumerable<DataRow> sequence = results.AsEnumerable();
var records = sequence.ToList();
var orderedResults = sortOrder == "asc"
? records.OrderBy(o => o["Job"])
: records.OrderBy(o => o["Job"]);
StringBuilder sb1 = new StringBuilder();
StringWriter sw = new StringWriter(sb1);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartObject();
writer.WritePropertyName("draw");
writer.WriteValue(param.draw.ToString());
writer.WritePropertyName("recordsTotal");
writer.WriteValue(records.Count);
writer.WritePropertyName("recordsFiltered");
writer.WriteValue(records.Count);
writer.WritePropertyName("data");
writer.WriteStartArray();
foreach (var result in orderedResults)
{
writer.WriteStartArray();
//writer.WriteValue("< img class='image-details' src='content/DataTables-1.10.4/images/details_open.png' runat='server' height='16' width='16' alt='View Details'/>");
writer.WriteValue(result["Job"]);
writer.WriteValue(result["Customer"]);
writer.WriteValue(result["Planner"]);
writer.WriteValue(result["Description"]);
//writer.WriteValue(result["so"]);
writer.WriteValue("so");
writer.WriteEndArray();
}
writer.WriteEndArray();
writer.WriteEndObject();
writer.Flush();
writer.Close();
}
sw.Close();
string Json = sb1.ToString();
//JavaScriptSerializer serializer = new JavaScriptSerializer();
//var Json = serializer.Serialize(sb1);
return Json;
}
}
这种错误是由于您没有使用javascript函数或ajax数据的有效选项。您声明的函数需要一个名为param的参数。我没有尝试将结构作为webservice函数的参数,但我在webservice上工作时遇到了同样的问题。
这是我一直在使用的c#声明:
/// <summary>
/// Ottine la lista delle comunicazioni
/// </summary>
/// <returns></returns>
[System.Web.Services.WebMethod]
public static string GetListaPreaccettazioni(string cognome, string nome, string cf, string dtinizio, string dtfine)
我能够用这些javascript成功地调用它,还请注意,在Datatable选项数据中,我无法将正确的参数直接作为字符串传递,但我需要使用函数
var co = $("#cognomeSearch").val();
var no = $("#nomeSearch").val();
var cf = $("#cfSearch").val();
var dti = $("#dtinizioSearch").val();
var dtf = $("#dtfineSearch").val();
//TEST WebService
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
data: "{'cognome':'" + co + "','nome':'" + no + "','cf':'" + cf + "','dtinizio':'" + dti + "','dtfine':'" + dtf + "'}",
url: "RicercaPreaccettazioni.aspx/GetListaPreaccettazioni",
success: function (dataj) {
if (dataj != null && dataj != '') {
console.log(dataj);
console.log(dataj.d);
}
}
});
var $table = $('#TableRisultati').dataTable({
"destroy": true,
"ajax": {
type: "POST",
contentType: "application/json",
dataType: "json",
data: function (d) {
return "{'cognome':'" + co + "','nome':'" + no + "','cf':'" + cf + "','dtinizio':'" + dti + "','dtfine':'" + dtf + "'}";
},
dataSrc: function (dataj) {
return JSON.parse(dataj.d);
},
url: "RicercaPreaccettazioni.aspx/GetListaPreaccettazioni"
}
});