[英]Calling ASMX Web Service from Javascript
我想從javascript調用web服務。
這是我的代碼:
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(內部服務器錯誤)
[UPDATE]
我忘了提到我在項目的webconfig中添加了(使用webservice)因為我收到了錯誤:
XMLHttpRequest無法加載http://www.mywebsite.ro/ServiceGetStock.asmx/HelloWorld 。 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此不允許來源“http:// localhost:11300”。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
好了朋友們。 我發現了這個問題。 創建ASMX文件時,必須讀取所有注釋行。 要允許使用ASP.NET AJAX從腳本調用此Web Service,請取消注釋以下行。
//[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);
}
問題解決了! 謝謝大家的提示.......
使用dataType:“jsonp”,而不是dataType:“json”,jsonp用於交叉domian webservice。 希望它會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.