簡體   English   中英

從Javascript調用ASMX Web服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM