Calling ASMX Web Service from Javascript

36,557

Ok guys. I found the problem. When an ASMX file is created, you must read all comments lines. To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

 //[System.Web.Script.Services.ScriptService]

So the GetStock function is:

  [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;
        }
    }

and the Ajax code is:

   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);
    }

Problem solved! Thanks all for tips.......

Share:
36,557
POIR
Author by

POIR

Updated on July 09, 2022

Comments

  • POIR
    POIR almost 2 years

    I want to call a webservice from javascript.

    This is my code:

        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);
        }
    

    My ServiceGetStock.asmx code:

     [WebMethod]
        public string GetStock(int variant_id)
        {
            try
            {
    
                ProductVariant variant = ProductVariantManager.GetProductVariantByID(variant_id);
    
                return variant.Stock.ToString();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
    

    I got the error message:

    POST http://www.mywebsite.ro/ServiceGetStock.asmx/GetStock 500 (Internal Server Error)

    [UPDATE]

    I forgot to mention that I added in webconfig of project(with webservice) because I got the error:

    XMLHttpRequest cannot load http://www.mywebsite.ro/ServiceGetStock.asmx/HelloWorld. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http:// localhost:11300' is therefore not allowed access.

      <httpProtocol>
              <customHeaders>
                  <add name="Access-Control-Allow-Origin" value="*" />
                  <add name="Access-Control-Allow-Headers" value="Content-Type" />
              </customHeaders>
      </httpProtocol>
    
  • Si8
    Si8 over 7 years
    Going directly to this: http://myserver:123/WServ/EDt.asmx/HelloWorld displays the xml. But when I do the above I already get a 0 error. Any idea why?
  • POIR
    POIR over 7 years
    @Si8 what error do you get? Show us the error message.
  • Si8
    Si8 over 7 years
  • FrenkyB
    FrenkyB almost 4 years
    Do you have to use absolute url? Relative link is not working out for you?