从 Javascript 调用 ASMX Web 服务
Posted
技术标签:
【中文标题】从 Javascript 调用 ASMX Web 服务【英文标题】:Calling ASMX Web Service from Javascript 【发布时间】:2014-02-12 16:25:45 【问题描述】:我想从 javascript 调用网络服务。
这是我的代码:
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 http://www.mywebsite.ro/ServiceGetStock.asmx/GetStock 500(内部服务器错误)
[更新]
我忘了提到我在项目的webconfig中添加了(带有webservice),因为我得到了错误:
XMLHttpRequest 无法加载 http://www.mywebsite.ro/ServiceGetStock.asmx/HelloWorld。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:11300' 因此不允许访问。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
【问题讨论】:
你的GetStock
的方法签名是什么
使用 Fiddler (fiddler2.com) 模拟 POST
请求(使用 Composer 选项卡)并查看您的回复 - 这将具体告诉您您实际收到的详细错误消息.
500 是服务器端错误。您是否调试过服务器端代码?此外,"id='1'"
不是有效的 json,id
!= variant_id
。我想这很重要。
试试"variant_id":"1"
好的。我将 id 更改为 variant_id。这是我的错误。但我得到了同样的错误。
【参考方案1】:
好的,伙计们。我发现了问题。创建 ASMX 文件时,您必须读取所有 cmets 行。要允许使用 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);
问题解决了!谢谢大家的提示......
【讨论】:
直接进入这个:http://myserver:123/WServ/EDt.asmx/HelloWorld
显示 xml。但是当我执行上述操作时,我已经得到了0 error
。知道为什么吗?
@Si8 你得到什么错误?向我们显示错误消息。
这是我的问题:***.com/questions/41752213/…
你必须使用绝对网址吗?相对链接不适合您?【参考方案2】:
使用数据类型:“jsonp”,而不是数据类型:“json”, jsonp 用于跨域网络服务。希望它会有所帮助。
【讨论】:
以上是关于从 Javascript 调用 ASMX Web 服务的主要内容,如果未能解决你的问题,请参考以下文章
无法从 .net 中的 Ajax 调用 .asmx Web 服务
使用 JSON 从 AJAX 和 JQuery 调用简单的 Web 服务(.asmx 文件) - 解析错误
使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务