【问题标题】:How to pass AJAX data in DataTables jQuery plugin?如何在 DataTables jQuery 插件中传递 AJAX 数据?
【发布时间】:2014-06-03 05:03:56
【问题描述】:

下面是我对服务器的 AJAX 请求。我已经从他们的官方网站here 上阅读了如何做到这一点;但是,我不完全理解如何正确传递data

        $('#MainContentPlaceHolder_business_return_flights').dataTable({
            "ajax": {
                "url": "Browse.aspx/GetReturnFlights",
                "type": "POST",
                "data": JSON.stringify({ businessClass: "true" }),
                "contentType": "application/json; charset=utf-8",
                "dataType": "json"
            }
        });

它不断返回以下错误:

{"Message":"Invalid JSON primitive: %7B\u00261=%22\u00262=b\u00263=u\u00264=s\u00265=i\u00266=n\u00267=e\u00268=s\u00269=s\u002610=C\u002611=l\u002612=a\u002613=s\u002614=s\u002615=%22\u002616=%3A\u002617=%22\u002618=t\u002619=r\u002620=u\u002621=e\u002622=%22\u002623=%7D.","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

我试图从服务器端函数以及 AJAX 调用中删除参数,它工作正常。不过,我不明白如何使用 AJAX。

更新:所以,我在没有 JSON.stringify() 的情况下使用它,它给了我以下信息:

{"Message":"Invalid JSON primitive: businessClass.","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

更新这是后面代码中的方法。

    [WebMethod]
public static string GetReturnFlights(string businessClass)
{
    listRows = new List<List<string>>();
    business = new Table();
    economy = new Table();

    FillTable(economy, business, scheduledFlights.List);

    if (businessClass.Equals("true"))
    {
        foreach (TableRow row in business.Rows)
        {
            listRow = new List<string>();

            foreach (TableCell cell in row.Cells)
            {
                listRow.Add(cell.Text);
            }

            listRows.Add(listRow);
        }
    }
    else
    {
        foreach (TableRow row in economy.Rows)
        {
            listRow = new List<string>();

            foreach (TableCell cell in row.Cells)
            {
                listRow.Add(cell.Text);
            }

            listRows.Add(listRow);
        }
    }

    field = new Dictionary<string, object>() { { "draw", "1" }, { "recordsTotal", economy.Rows.Count.ToString() }, { "recordsFiltered", economy.Rows.Count.ToString() }, { "data", listRows } };

    return new JavaScriptSerializer().Serialize(field);
}

FillTable 方法基本上会填充表格。该方法在变成 Web 方法之前运行良好。返回普通 JSON。

更新:businessClass周围添加双引号的结果

{"Message":"Invalid JSON primitive: businessClass.","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

【问题讨论】:

  • 尝试删除 JSON.stringify

标签: c# javascript jquery ajax datatables


【解决方案1】:

"data": JSON.stringify({ businessClass: "true" }),改成"data": { "businessClass": "true" },试试看

【讨论】:

  • 您是否使用断点调试了您在businessClass 中得到的内容?
  • @yaharga 我已经编辑了答案,在businessClass 周围提供双引号。
  • 我不相信服务器代码一开始就在运行,因为错误发生在 AJAX 中而不是服务器端函数中。
  • 我认为问题在于您的服务器代码不在 ajax 中,请通过在 web 方法中放置断点来检查。
  • 在方法中放置断点。从一开始就永远不会运行。程序运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2014-10-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多