【发布时间】:2020-01-28 22:19:06
【问题描述】:
我正在使用 ajax 进行两个不同的异步调用。两者都以相同的方式完成,但一个具有 web 方法的参数。该链接是正确的,当我关注它时,我在浏览器中正确地得到了返回,但我只是不断收到服务器 500 错误。有任何想法吗? 一个没有参数也能正常工作,这里是 JS/jQuery 代码,因为我有点确定它不在 C# 端:
function CatChanged() {
var strA = $('#ddlCategory').val();
$.ajax({
url: encodeURI('https://localhost:44380/WebService1.asmx/GetProducts?category=' + strA),
data: '<soap: Envelope xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd="http://www.w3.org/2001/XMLSchema" xmlns: soap="http://schemas.xmlsoap.org/soap/envelope/%22%3E<soap: Body><xmlns="http://tempuri.org/" /></soap: Body></soap: Envelope >',
type: 'POST',
contentType: "text/xml",
dataType: "text/xml",
success: function (response) {
alert(response.responseText);
},
error: function (xhr, ajaxOptions, thrownError) {
alert("ERROR!!");
alert(xhr.status);
alert(thrownError);
}
});
}
下面是来自后面 C# 代码的 Web 方法代码:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string GetCategories()
{
Catalog cat = new Catalog();
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Serialize(cat.categories);
}
[WebMethod]
public string GetProducts(string category)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
Catalog cat = new Catalog();
List<string> retList = new List<string>();
switch (category)
{
case "Electronics":
foreach (Product product in cat.electronicProducts)
{
retList.Add(product.itemName);
}
return jss.Serialize(retList);
case "Apparel":
foreach (Product product in cat.apparelProducts)
{
retList.Add(product.itemName);
}
return jss.Serialize(retList);
case "Food and Drink":
foreach (Product product in cat.electronicProducts)
{
retList.Add(product.itemName);
}
return jss.Serialize(retList);
default:
foreach (Product product in cat.electronicProducts)
{
retList.Add(product.itemName);
}
return jss.Serialize(retList);
}
}
... 这是我在 Chrome 中点击开发人员控制台的直接链接时在浏览器中获得的返回屏幕截图:
从 url 调用时,web 方法的返回都是好的。这让我认为它必须是 ajax 调用中的某些东西,我不确定当我将参数添加到 web 方法时我需要做些什么不同才能使用它。就像我说的,第一个 web 方法在我的 JavaScript 代码中工作,我能够很好地解析返回的所有内容。
此外,使用任何其他服务、MVC 或类似的东西都不是一种选择。鉴于目前的情况,我必须让它发挥作用。
【问题讨论】:
标签: javascript c# .net ajax soap