使用ajax调用Web服务

时间:2013-08-28 03:46:27

标签: c# javascript ajax visual-studio-2012

尝试使用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方法的参数,因此如果成功,它将设置{{1对于方法的结果,如果它没有成功,它会将label 3设置为提供的字符串......

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

label 3

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

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

任何澄清都需要在下面发布,谢谢。

问候

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

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

1 个答案:

答案 0 :(得分:1)

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