【问题标题】:AJAX Post data to asmx WebService Method always nullAJAX 将数据发布到 asmx WebService 方法始终为空
【发布时间】:2020-06-09 05:29:20
【问题描述】:

我正在使用测试方法(重命名文件)运行 Web 服务。 使用 Ajax(客户端),我可以在我的服务上调用该函数。

但是当我向我的方法发送 Int、String.. 或其他任何内容时,数据显示为“null”; 有什么问题?

我的javascript:

 
$.ajax({
    url: "WebServiceTest.asmx/NewId",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    //data: JSON.stringify({ rename: newName}),
    data: "{ 'Id': 8 }",
    dataType: "json",
    success: function(data) {
        alert(data.d);
    }
});

我的网络服务

[System.Web.Script.Services.ScriptService]
public class WebServiceTest: WebService
{

    [WebMethod]
    public int NewId(int id )
    {
        //..do something

        return id; //always null
    }        
}

谢谢! :)

【问题讨论】:

  • 这可能是大小写问题,您是否尝试将 JSON 消息的 Id 参数更新为小写? Web 服务方法的参数名称以小写形式定义,但在 JSON 消息中以大写“I”开头。也许尝试使用以下 JSON 消息{ 'id': 8 }

标签: asp.net ajax vb.net asmx


【解决方案1】:

Http请求的参数为case-sensitive。因此,正如 @Maurits van Beusekom 在评论中指出的那样,您似乎没有正确发送数据:数据应该是 data: "{ 'id': 8 }" 而不是 data: "{ 'Id': 8 }",如下所示:

 $.ajax({
    url: "WebServiceTest.asmx/NewId",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{ 'id': 8 }",
    dataType: "json",
    success: function (data) {
        alert(data.d);
    }
});

【讨论】:

    【解决方案2】:

    ASMX Web 服务使用 SOAP,因此您需要在 SOAP 有效负载内发送消息。尝试像这样发送您的消息:

    data: '<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
      '<soap:body>' +
      '<newid xmlns="WebServiceTest.asmx/NewId">' +
      '<id>' + id + '</id>' +
      '</newid>' +
      '</soap:body>' +
      '</soap:envelope>',
    beforeSend: function (xhr) {
      xhr.setRequestHeader('SOAPAction', 'WebServiceTest.asmx/NewId');
    },
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多