Web Services 通过JS、DataType Json调用Web服务

wj8zmpe1  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(142)

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

Web服务名称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;

        }

    }

每次运行都显示错误框。请帮助我通过它。谢谢。

k75qkfdt

k75qkfdt1#

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

xuo3flqw2#

您的URL错误。它应该是以下格式:

url: "/WebService1.asmx/sum"

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

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

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

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

您可以简单地执行以下操作:

var result= data.d;

最后,在WebMethod中,您根本不需要使用Javascript序列化程序。您只需执行以下操作:

int sum = ...  
 return sum;

响应已经是JSON格式。不需要序列化它两次。

0md85ypi

0md85ypi3#

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()
}),

相关问题