3

我正在尝试通过 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;


        }

    }

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

4

3 回答 3

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 格式。无需序列化两次。

于 2013-07-30T17:28:02.740 回答
0

您使用 Web 服务的绝对 URL。您应该使用如下片段所示的相对服务器路径:

$.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
   }
});
于 2013-07-30T17:26:36.197 回答
0
url: "C:/Users/hp/Documents/visual studio 2010/Projects/WebApplication3/WebApplication3/WebService1.asmx/sum",

这需要是一个 HTTP URL,并且运行 JavaScript 的 HTML 文档需要在同一个源上。

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()
}),
于 2016-06-25T11:07:13.670 回答