web-dev-qa-db-ja.com

JavascriptからASMXWebサービスを呼び出す

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>
7
POIR

みんなわかりました。私は問題を見つけました。 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);
    }

問題が解決しました!ヒントをありがとう.......

13
POIR

dataType: "json"の代わりにdataType: "jsonp"を使用します。jsonpは、クロスドメインWebサービス用です。それが役立つことを願っています。

0
user3922209