如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应

Posted

技术标签:

【中文标题】如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应【英文标题】:How to use jQuery to call asp.net asmx web service with parameters to get response 【发布时间】:2018-05-20 00:39:06 【问题描述】:

我编写了一个简单的 ASMX Web 服务,其中包含一种从数据库中获取一些值的方法。我的服务代码是:

[WebMethod]
public string GetProductStock(string productId, string TerminalId, string CCPId)         

    ProductsDomain objProduct = new ProductsDomain();
    objProduct.Product_Id = Convert.ToInt32(productId);
    objProduct.TerminalId = Convert.ToInt32(TerminalId);
    objProduct.CCPId = Convert.ToInt32(CCPId);
    DataTable dt = objProduct.GetProductDetail();
    if (dt.Rows.Count > 0)
    
         return dt.Rows[0]["CurrentQty"].ToString();
    
    else
    
        return "0";
    

这是我的 jquery 函数:

function checkStock() 
            var txt_PId = $("#content_body_content_lPId").text();
            var txt_TerminalId = $("#content_body_content_lTerminalId").text();
            var txt_CCPId = $("#content_body_content_lCCPId").text();
            var msg = "" + String.format("'productId':'0', 'TerminalId':'1','CCPId':'2'", txt_PId, txt_TerminalId, txt_CCPId) + ""
           // alert(msg);
            $.ajax(
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "CService.asmx/GetProductStock",
                data: msg,
                dataType: "json",
                success: function (Result) 
                    alert();
                    Result = Result.d;
                   // data = Result
                    //alert(data)
                ,
                error: function (Result) 
                    debugger;
                    alert("Error: " + Result.error.toString());
                    return false;
                
            );
            return false;
        

这个 jquery 方法返回错误,当我调试错误时,错误状态代码是 500。 错误信息:

错误:函数 ()if(h)var d=h.length;!function f(b)n.each(b,function(b,c)var d=n.type(c);"函数"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)) (参数),b?e=h.length:c&&(g=d,j(c))return 这

任何人都可以建议我解决这个问题?

【问题讨论】:

什么是错误信息? @SeM 错误消息添加到问题中 需要使用JsonConvert.SerializeObject来序列化返回对象 @RonyLoud 仍然是同样的问题,我已经序列化了返回对象但它没有工作 【参考方案1】:

必须在继承System.Web.Services.WebServiceclass 上启用[System.Web.Script.Services.ScriptService] 才能通过ajax 访问其方法

网络服务

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class WebServiceFile : System.Web.Services.WebService
    

        [WebMethod]
        //[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
        public  string GetProductStock(string productId, string TerminalId, string CCPId)
        
            ProductsDomain objProduct = new ProductsDomain();
            objProduct.Product_Id = Convert.ToInt32(productId);
            objProduct.TerminalId = Convert.ToInt32(TerminalId);
            objProduct.CCPId = Convert.ToInt32(CCPId);
            DataTable dt = objProduct.GetProductDetail();
            if (dt.Rows.Count > 0)
            
                return dt.Rows[0]["CurrentQty"].ToString();
            
            else
            
                return "0";
            
        

        public class ProductsDomain
        
            public int Product_Id  get; set; 
            public int TerminalId  get; set; 
            public int CCPId  get; set; 
            public DataTable GetProductDetail()
            
                DataTable dt = new DataTable();
                dt.Columns.Add("CurrentQty");
                DataRow dr = dt.NewRow();
                dr["CurrentQty"] = "Smith";
                dt.Rows.Add(dr);
                DataRow dr1 = dt.NewRow();
                dr1["CurrentQty"] = "John";
                dt.Rows.Add(dr1);
                return dt;

            
        

    

jQuery

function checkStock() 
            var txt_PId = 1;
            var txt_TerminalId = 2;
            var txt_CCPId = 3;
            var msg = 'productId:"' + txt_PId + '",TerminalId:"' + txt_TerminalId + '",CCPId:"' + txt_CCPId + '"';
            debugger;
            $.ajax(
                type: "POST",
                cache: false,
                contentType: "application/json; charset=utf-8",
                url: "/WebServiceFile.asmx/GetProductStock",
                data: msg,
                dataType: "json",                
                success: function (Result) 
                    alert();
                    Result = Result.d;
                    // data = Result
                    alert(Result)
                ,
                error: function (Result) 
                    debugger;
                    alert("Error: " + Result.error.toString());
                    return false;
                
            );
        

【讨论】:

以上是关于如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有母版页的 ASP.NET 中使用 JCrop

带有 ASP.NET MVC 的 jquery - 调用启用 ajax 的 Web 服务

带有 Jquery 模态形式的 asp.net MVC

带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面

如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC 控制器?

带有 ASP.NET 问题的 Jquery 自动完成