从Javascript调用ASMX Web服务
我想从javascript调用Web服务 这是我的代码:从Javascript调用ASMX Web服务,javascript,jquery,asp.net,web-services,asmx,Javascript,Jquery,Asp.net,Web Services,Asmx,我想从javascript调用Web服务 这是我的代码: var method="GetStock"; var url = "http://www.mywebsite.ro/ServiceGetStock.asmx"; $.ajax({ type: "POST", url: url + "/GetStock", data: "{variant_id='1'}", contentType: "applicati
var method="GetStock";
var url = "http://www.mywebsite.ro/ServiceGetStock.asmx";
$.ajax({
type: "POST",
url: url + "/GetStock",
data: "{variant_id='1'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccessCall,
error: OnErrorCall
});
function OnSuccessCall(response) {
alert(response.d);
}
function OnErrorCall(response) {
alert(response.status + " " + response.statusText);
}
我的ServiceGetStock.asmx代码:
[WebMethod]
public string GetStock(int variant_id)
{
try
{
ProductVariant variant = ProductVariantManager.GetProductVariantByID(variant_id);
return variant.Stock.ToString();
}
catch (Exception ex)
{
return ex.Message;
}
}
我收到了错误消息:
POST 500(内部服务器错误)
[更新]
我忘了提到我在project的webconfig中添加了(使用webservice),因为我得到了错误:
无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“http://localhost:11300”
好的,伙计们。我发现了问题。创建ASMX文件时,必须读取所有注释行。要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行
//[System.Web.Script.Services.ScriptService]
因此GetStock函数是:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetStock(string variant_id)
{
SendEmail.SendErrorMail("in"+ variant_id);
try
{
ProductVariant variant = ProductVariantManager.GetProductVariantByID(Convert.ToInt32(variant_id));
return variant.Stock.ToString();
}
catch (Exception ex)
{
return ex.Message;
}
}
Ajax代码是:
var url = "http://www.mywebsite.ro/ServiceGetStock.asmx";
$.ajax({
type: "POST",
url: url + "/GetStock",
data: "{variant_id:'1'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccessCall,
error: OnErrorCall
});
function OnSuccessCall(response) {
alert(response.d);
}
function OnErrorCall(response) {
alert(response.status + " " + response.statusText);
}
问题解决了!感谢所有提示……使用数据类型:“jsonp”,而不是数据类型:“json”,
jsonp用于跨域Web服务。希望有帮助。你的
GetStock
的方法签名是什么?使用Fiddler(fiddler2.com)模拟POST
请求(使用Composer选项卡)并查看你的响应-这将明确告诉你实际收到的详细错误消息。500是服务器端错误。你调试服务器端代码了吗?另外,“{id='1'}”
不是有效的json,并且id
!=<代码>变量id。我想这很重要。试试{“variant\u id”:“1”}
好的。我把身份证换成了变体身份证,这是我的错。但是我得到了同样的错误。直接转到这个:http://myserver:123/WServ/EDt.asmx/HelloWorld
显示xml。但是当我执行上述操作时,我已经得到一个0错误
。知道为什么吗?@Si8你有什么错误?向我们显示错误消息。这是我的问题:你必须使用绝对url吗?相对链接不适合你?
var url = "http://www.mywebsite.ro/ServiceGetStock.asmx";
$.ajax({
type: "POST",
url: url + "/GetStock",
data: "{variant_id:'1'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccessCall,
error: OnErrorCall
});
function OnSuccessCall(response) {
alert(response.d);
}
function OnErrorCall(response) {
alert(response.status + " " + response.statusText);
}