尝试使用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()" />
答案 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);
}