【问题标题】:how to pass string parameter to webmethod in a web service from JQuery如何从 JQuery 将字符串参数传递给 Web 服务中的 Web 方法
【发布时间】:2017-01-02 11:18:43
【问题描述】:

这是我在网络服务中的网络方法(示例项目的本地).asmx

[WebMethod]
    public List<test1> GetLstB(string s)
    {
        test1 t;
        List<test1> lstB = new List<test1>();
        t = new test1()
        {
            itm1 = "aaa" + s,
            itm2 = "bbb" + s
        };
        lstB.Add(t);

        t = new test1()
        {
            itm1 = "ccc" + s,
            itm2 = "ddd" + s
        };
        lstB.Add(t);


        return lstB;
    }

public class test1
{
    public string itm1 { get; set; }
    public string itm2 { get; set; }
}

这里是调用这个 webmethod 的 JQuery

$(function () {
    $("[id*=Button4").click(function () {
        var x = 'xyz';
        $.ajax({
            type: "POST",
            url: "ServiceCS.asmx/GetLstB",
            data: "{'" + x + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",            
            success: function (result) {
                for (var i in result.d) {
                    alert(result.d[i].itm1 + "--" + result.d[i].itm2);
                }
            },

            error: function (r) {
                alert(r.responseText);
                console.log("AJAX error in request: " + JSON.stringify(r, null, 2));
            },
            failure: function (r) {
                alert(r.responseText);
            }
        });
        return false;
    });
});

我在没有传递参数的情况下运行了这个 JQuery 函数 (var x = 'xyz';),并且 web 方法返回了我在 JQuery 中迭代的对象列表,没有任何问题。但是后来我决定尝试将参数传递给 webmethod(也尝试过“xyz”),现在我得到了这个错误——如何传递参数 var x = "xyz";对 web 方法正确吗?

"Message\":\"传入的对象无效,应为\u0027:\u0027 或\u0027}\u0027。(7): {\u0027xyz\u0027}\",\"StackTrace\":\" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer。 BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化程序,字符串输入,类型类型,Int32 depthLimit)\r\n 在 System.Web.Script .Serialization.JavaScriptSerializer.Deserialize[T](字符串输入)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext 上下文,JavaScriptSerializer 序列化程序)\r\n 在 System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData methodDat

【问题讨论】:

    标签: c# jquery asp.net web-services


    【解决方案1】:

    以上两个答案对于初学者来说仍然一无所知。 因为 javaScript 和 jquery 是区分大小写的。

    传递争论的正确语法是

    data: "{'s':'"+x+"'}"
    

    【讨论】:

      【解决方案2】:

      参数应该是这样的。

      $(function () {
          $("[id*=Button4").click(function () {
              var x = 'xyz';
              $.ajax({
                  type: "POST",
                  url: "ServiceCS.asmx/GetLstB",
                  data: "{'s:" + x + "'}",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",            
                  success: function (result) {
                      for (var i in result.d) {
                          alert(result.d[i].itm1 + "--" + result.d[i].itm2);
                      }
                  },
      
                  error: function (r) {
                      alert(r.responseText);
                      console.log("AJAX error in request: " + JSON.stringify(r, null, 2));
                  },
                  failure: function (r) {
                      alert(r.responseText);
                  }
              });
              return false;
          });
      });
      

      或者你可以这样做:

       data:JSON.stringify({ s:  x})
      

      【讨论】:

      • 呵呵 :) 谢谢。我刚刚想通了,但你们更快。我必须在数据中添加参数名称's':调用。
      • 并使用 jquery.json-2.4.min.js 你可以说 $("[id*=Button4").click(function () { var parm = 'xyz'; var parm2 = 3 ; var params = new Object(); params.s = parm; params.i = parm2; ........ data: $.toJSON(params), ........ 如果 webmethod 获取添加了更多参数。
      【解决方案3】:
      $(function () {
          $("[id*=Button4]").click(function () {
              var x = 'xyz';
              $.ajax({
              type: "POST",
              url: "ServiceCS.asmx/GetLstB",
              data: {s:x},
              contentType: "application/json; charset=utf-8",
              dataType: "json",            
              success: function (result) {
                  for (var i in result.d) {
                      alert(result.d[i].itm1 + "--" + result.d[i].itm2);
                  }
              },
      
              error: function (r) {
                  alert(r.responseText);
                  console.log("AJAX error in request: " + JSON.stringify(r, null, 2));
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        相关资源
        最近更新 更多