jQuery AJAX POST到ASMX web服务导致“无法转换系统类型的对象”.字符串到system . coll

本文关键字:类型 系统 转换 对象 coll system 字符串 ASMX POST AJAX web | 更新日期: 2023-09-27 18:15:37

我设置了一个ASMX web服务作为测试:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public bool Test (string id)
{
    if (id != null)
    {
        return true;
    }
    else
        return false;
}

从jQuery我然后不是调用web方法和传递参数"id"。所以我使用:

$.ajax({
    var data = JSON.stringify("id: 123");
    data: data,
    dataType: "json",
    url: url
    type: "POST",
    contentType: "application/json; charset=utf-8",
    success: function (result) {},
    error: function (xmlHttpRequest, textStatus, errorThrown) {
          console.log(xmlHttpRequest.responseText);
          console.log(textStatus);
          console.log(errorThrown);
    }       
});

我已经使用JSON.stringify来确保JSON是正确的。然而,当我运行上面的代码时,我得到以下500内部服务器错误:

{"消息":"无法转换类型为'u0027System的对象。字符串' u0027类型system . string, ' u0027System.Collections.Generic.IDictionary ' 2 [System.Object] ' u0027"、"加":"在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(对象0、类型类型,JavaScriptSerializer序列化器,布尔抛出错误对象'u0026 convertedObject)'r'n atSystem.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(对象0、类型类型,JavaScriptSerializer序列化器,布尔抛出错误对象'u0026 convertedObject)'r'n atSystem.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串输入)' r ' nSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext背景下,WebServiceMethodDatamethodData)"、"ExceptionType":"系统。InvalidOperationException "}VM12798:89误差

在我看来,一旦通过服务器接收到请求,这个错误就会发生。我不确定,然而,为什么它试图把字符串变成一个IDictonary ?

上面的代码看起来很简单。我设置JSON错误吗?如果我输入console.log data,它返回:

"id: 123"

ASMX期望有所不同吗?

jQuery AJAX POST到ASMX web服务导致“无法转换系统类型的对象”.字符串到system . coll

您正在JSON对象中声明var data。直接设置data属性。

还有,你使用JSON.stringify是不正确的。它应该用于将JavaScript对象转换为JSON字符串。

见下面更新的代码:

$.ajax({
        data: JSON.stringify({id: "123"}),
        dataType: "json",
        url: url
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function (result) {},
        error: function (xmlHttpRequest, textStatus, errorThrown) {
              console.log(xmlHttpRequest.responseText);
              console.log(textStatus);
              console.log(errorThrown);
        }                   
});