【问题标题】:Web service call through JS, DataType Json通过JS调用Web服务,DataType Json
【发布时间】:2013-07-30 23:17:13
【问题描述】:

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


        }

    }

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

【问题讨论】:

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


    【解决方案1】:

    您使用绝对 URL 访问您的网络服务。您应该使用如下 sn-p 建议的相对服务器路径:

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

    【讨论】:

      【解决方案2】:

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

       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,但路径没有解析为绝对。
      • @Abhishek 它应该解析为相对路径,而不是绝对路径。你不想要绝对的。
      • WebService 是否命中?
      【解决方案3】:
      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()
      }),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-03
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多