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(内部サーバーエラー)
[更新]
エラーが発生したため、プロジェクトの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サービスを呼び出せるようにするには、次の行のコメントを解除します。
//[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: "json"の代わりにdataType: "jsonp"を使用します。jsonpは、クロスドメインWebサービス用です。それが役立つことを願っています。