使用jQuery Ajax将参数传递给WebMethod会出错

时间:2014-01-08 11:42:00

标签: c# jquery ajax serialization

我正在使用网络方法和ajax调用,但无法通过参数使用它?

我已经完成了许多修正工作,但是没有能够解决我的问题?

我需要传递一个字符串并让我的web方法返回一个数据表,为什么有必要将它作为json传递?

这是ajax调用:

var jsdata = '{category:' + category + '}';
var jstext = JSON.stringify(jsdata, null, 2);
$.ajax({
  type: "POST",
  url: "GIFacRequest.aspx/GetSubCategories",
  data: jstext ,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (dtSubCategory) {
        PopulateSubCategoryDD(dtSubCategory);
      },
      error: function (response) {
         $('body', document).html(response.responseText);
      }
  });

我的网络方法:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static DataTable GetSubCategories(string category)
{
}

我得到的错误如下:

  

“消息”:“无法将类型为\ u0027System.String \ u0027的对象转换为   类型   \ u0027System.Collections.Generic.IDictionary`2 [System.String,System.Object的] \ u0027" , “堆栈跟踪”:”   在   System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(对象   o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,   对象和放大器; convertedObject)\ r \ n at   System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(对象   o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,   对象和放大器; convertedObject)\ 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](字符串   输入)\ r \ n at   System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext的   context,JavaScriptSerializer序列化程序)\ 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.InvalidOperationException”

1 个答案:

答案 0 :(得分:1)

你的变量params var jsdata = '{category:' + category + '}'是一个字符串。

所以行JSON.stringify(jsdata, null, 2);是多余的(或应该是)。只需设置数据:jsdata,

尝试使用此代码

var jsdata = '{category:' + category + '}';
$.ajax({
  type: "POST",
  url: "GIFacRequest.aspx/GetSubCategories",
  data: jsdata ,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (dtSubCategory) {
        PopulateSubCategoryDD(dtSubCategory);
      },
      error: function (response) {
         $('body', document).html(response.responseText);
      }
  });