通过JS、DataType Json调用Web服务

Web service call through JS, DataType Json

本文关键字:调用 Web 服务 Json DataType JS 通过      更新时间:2023-09-26

我试图通过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;

        }
    }

每次运行时都会显示"错误"框。请帮我渡过难关。谢谢。

您使用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
   }
});

您的URL错误。它应该是这样的形式:

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

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

这需要是一个HTTPURL,并且运行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()
}),