1

正在尝试使用 AJAX 调用此 Web 服务...

网络服务如下

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

    [WebMethod]
    public String countryCode(String input)
    {



            StringBuilder strings = new StringBuilder("", 10000);
            String text = System.IO.File.ReadAllText(Server.MapPath("countryCodes.txt"));
            String[] countries = Regex.Split(text, "#");

            var valids = new List<String>();
            foreach (String c in countries)
            {
                if (c.ToUpper().StartsWith(input.ToUpper()) || c.ToLower().StartsWith(input.ToLower()))
                {
                    if (input == "")
                    {
                        break;
                    }

                    valids.Add(c);
                }
            }
            return (valids.Any()) ? String.Join(" ", valids) : "No results found for your input!";

        }


    } 

我已经设置了一个空的 Web 表单,并像这样在脚本管理器中调用了服务引用

<body>
<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/WebService1.asmx" />
        </Services>
    </asp:ScriptManager>

我的javascript如下

<script type= "text/javascript">
    var a = wRequest.set_userContext("user's context");
    var onClick = function () {
        CountryCodes.WebService1.countryCode($get("TextBox1"), onSucess, onFailed);
    }
    var onSuccess = function (result) {
       $get("Label3").innerHTML = result;
   }
   var onFailed = function (result) {
       $get("Label3").innerHTML = "No results found for your input!";
   }
</script>

现在我的理解是,当按下按钮时,它将接受TextBox1's值的输入并将其用作我的WebService.countryCode方法的参数,因此如果成功,它将设置label 3为方法的结果,如果不成功,它将设置label 3到提供的字符串...

然而这并没有发生......事实上,当我点击我的按钮时没有任何反应,为了清楚起见,这是我的按钮声明......

<input type="button" value="Find Country Codes " onclick ="onClick()" />

此按钮与自动生成文本框1 和标签代码的位置相同。

所以我的问题是,我做错了什么,如何解决?

任何需要澄清的地方都可以在下面发布,谢谢。

问候

编辑:是的,我已经在网络服务中注释掉了这一行

"[System.Web.Script.Services.ScriptService]"
4

1 回答 1

1

用 装饰您的 Web 服务类[System.Web.Script.Services.ScriptService],如下所示:

[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService

这允许您的 JavaScript 调用您的 Web 服务。

此外,更改您对 Web 服务的调用以删除CountryCodes前缀,如下所示:

var onClick = function () {
    WebService1.countryCode($get("TextBox1"), onSucess, onFailed);
}
于 2013-08-28T04:15:46.883 回答