通过JS,DataType Json调用Web服务

时间:2013-07-30 17:15:56

标签: javascript jquery asp.net json web-services

我试图通过JS调用Web服务,但无论如何它都没有得到调用。 我想把2号的总和。

页面包含3个textbox,并且文本设置为硬编码 如 :

 <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="Text1"  Text="5" runat="server">
    </asp:TextBox>
     <asp:TextBox ID="Text2" Text="2" runat="server">
    </asp:TextBox>
     <asp:TextBox ID="Text3" runat="server">
    </asp:TextBox>
    </div>
    </form>

我的代码如下:

<script type="text/javascript">
        $(document).ready(function () {
            debugger;
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "C:/Users/hp/Documents/visual studio 2010/Projects/WebApplication3/WebApplication3/WebService1.asmx/sum",
                data: "{'a':'" + $('input[id$=Text1]').val() + "','b':'" + $('input[id$=Text2]').val() + "'}",
                dataType: "json",


                success: function (data) {
                    alert(data);
                    var results = eval('(' + data.d + ')');
                    if (results == "success") {

                        $('input[id$=Text3]').val(data);
                        //$('span[id$=lblErr]').hide();
                    }
                    else {
                        $('span[id$=lblmsg]').hide();

                        // $('span[id$=lblErr]').show();

                    }


                },
                error: function () {
                    alert('Error');
                }


            });
        });

    </script>

WebService名称WebForm1.aspx

 public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
        public string sum(string a, string b)
        {
            string json = "";
            int sum = Convert.ToInt32(a) + Convert.ToInt32(b);
            System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            json = oSerializer.Serialize(sum);
            return json;


        }

    }

每次运行都显示错误框。请帮助我完成它。感谢。

3 个答案:

答案 0 :(得分:0)

您使用网络服务的绝对网址。您应该使用相对服务器路径,如此代码段建议:

$.ajax({
   type: "POST",
   contentType: "application/json; charset=utf-8",
   data: "{ your: 'data' }",
   dataType: "json",
   url: "WebService1.asmx/sum",
   success: function (data) {
       alert(data); //use your data object
   }
});

答案 1 :(得分:0)

您的网址错误。它应该是这种形式:

 url: "/WebService1.asmx/sum"

为了确保它始终解析到正确的路径,您可以改为:

url: '<%=ResolveClientURL("~/WebService1.asmx/sum%>")'

此外,在您的成功处理程序中,您不需要执行:

 var results = eval('(' + data.d + ')');

您可以这样做:

var result= data.d;

最后,在您的WebMethod中,您根本不需要使用JavascriptSerializer。你可以这样做:

 int sum = ...  
 return sum;

响应已采用JSON格式。无需将其序列化两次。

答案 2 :(得分:0)

url: "C:/Users/hp/Documents/visual studio 2010/Projects/WebApplication3/WebApplication3/WebService1.asmx/sum",

这需要是一个HTTP URL,运行JavaScript的HTML文档需要位于the same origin

data: "{'a':'" + $('input[id$=Text1]').val() + "','b':'" + $('input[id$=Text2]').val() + "'}",

您的JSON无效。字符串必须使用"个字符分隔,而不是',并且用户输入可能会轻易破坏它。

不要通过将字符串混合在一起来生成JSON。使用内置功能,可以正确地为您完成。

data: JSON.stringify({
    a: $('input[id$=Text1]').val(),
    b: $('input[id$=Text2]').val()
}),