如何使用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.WebService
的class
上启用[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 MVC 的 jquery - 调用启用 ajax 的 Web 服务
带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面