ajax 文本框输入自动提示 undefined
一个页面用了两个 AutoCompleteExtender 给两个textboz做输入提示,两个方法放在一个asmx内,显示的时候name可以正常显示,但是第二个(ID)却显示uddefined.....
我跟踪了一下,发现return ids.ToArray()这里返回的数据室正常的,但不知道为什么显示的结果却不正常,
请高手帮找下原因...谢谢了
下面是后台代码:
public class AutoCompleteName : System.Web.Services.WebService
{
[WebMethod]
public string[] GetName(string prefixText,int count)
{
List<string> names = new List<string>(count);
return names.ToArray();
}
[WebMethod]
public string[] GetID(string prefixText, int count)
{
List<string> ids = new List<string>(count);
return ids.ToArray();
}
}
前台代码:
<td>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender ID="AutoCompleteExtenderName" runat="server" TargetControlID="txtName"
ServicePath="AutoComplete.asmx" ServiceMethod="GetName" MinimumPrefixLength="1"
EnableCaching="true" CompletionInterval="1000" CompletionSetCount="20">
</asp:AutoCompleteExtender>
</td>
<td>
<asp:Label ID="Label5" runat="server" Text="ID"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtID" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender ID="AutoCompleteExtenderID" runat="server" TargetControlID="txtID"
ServicePath="AutoComplete.asmx" ServiceMethod="GetID" MinimumPrefixLength="4"
EnableCaching="true" CompletionInterval="1000" CompletionSetCount="20">
</asp:AutoCompleteExtender>
</td>
--------------------编程问答-------------------- 参考下。 --------------------编程问答-------------------- 大家都忙什么呢?期待高手~~ --------------------编程问答-------------------- 郁闷啊,我的问题没几分钟就被淹没了,现在的版本怎么样将帖子提前呢? --------------------编程问答-------------------- 那就用两个webservers测试下 --------------------编程问答--------------------
两个也不行,提示一样的,undefined --------------------编程问答-------------------- 在web service里面设置断点调试下,应该是整个问题,
要不就是AutoCompleteExtender 里面是有些设置错误
耐心点就可以了哦 --------------------编程问答-------------------- asp:Label ID="Label5" runat="server" Text="ID"> ,
这里的ID="Label5", 而在你下面的autocomplete控件中的targetcontrolid="txtID" ,
粗心了吧????呵呵 --------------------编程问答-------------------- <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" MinimumPrefixLength="2"
CompletionSetCount="8" TargetControlID = "TextBox1" ServicePath="AutoComplete.asmx" ServiceMethod="GetID" runat="server">
</cc1:AutoCompleteExtender>
ids中值是什么 --------------------编程问答-------------------- 不好意思,上面那个回复是我看错了。
会不会是因为asp.net ajax本身调用Web Services的时候同时去执行这两个方法,出现了time out的情况。这应该是asp.net ajax的bug, 也就是那个Batch Call的问题。试试这个:
Sys.Net.WebServiceProxy.retryOnFailure =--------------------编程问答--------------------
function(result, userContext, methodName, retryParams, onFailure)
{
if( result.get_timedOut() )
{
if( typeof retryParams != "undefined" )
{
debug.trace("Retry: " + methodName);
Sys.Net.WebServiceProxy.original_invoke.apply(this, retryParams );
}
else
{
if( onFailure ) onFailure(result, userContext, methodName);
}
}
else
{
if( onFailure ) onFailure(result, userContext, methodName);
}
}
Sys.Net.WebServiceProxy.original_invoke = Sys.Net.WebServiceProxy.invoke;
Sys.Net.WebServiceProxy.invoke =
function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet,
params, onSuccess, onFailure, userContext, timeout)
{
var retryParams = [ servicePath, methodName, useGet, params,
onSuccess, onFailure, userContext, timeout ];
// Call original invoke but with a new onFailure
// handler which does the auto retry
var newOnFailure = Function.createDelegate( this,
function(result, userContext, methodName)
{
Sys.Net.WebServiceProxy.retryOnFailure(result, userContext,
methodName, retryParams, onFailure);
} );
Sys.Net.WebServiceProxy.original_invoke(servicePath, methodName, useGet,
params, onSuccess, newOnFailure, userContext, timeout);
}
ids 返回的是一个string数组 "123-456789"......
--------------------编程问答-------------------- 老兄,你写的这个很高深,我看不明白....写在什么地方的呢?
--------------------编程问答--------------------
我设置看过了,一直到return返回值都是正确的,但页面显示的时候就undefined了.. --------------------编程问答--------------------
ASP.NET的ajax有一种是我上面说的那个,那个需要大量数据的加载和页面刷新才会出现这个bug,但是你的情况是不是因为你返回的是个数字,你试试加上个字符,或者是把数字转换为字符应该就解决掉这个Undefined的问题了。 --------------------编程问答-------------------- [WebMethod]
public object GetName(string prefixText,int count)
{
return new List <string>(count);
} --------------------编程问答-------------------- 谢谢回复啊~~
我试了一下,如果返回的是字符串比如:"abcd....."是可以显示的,如果是数字转成字符串:"1234-56789"
就不能显示......但是如果我在返回的数字字符串钱加个字母,比如:"1234-56789"变成:"a1234-56789"就可以正常显示了,不知道是什么原因....
--------------------编程问答-------------------- 还是未解决 --------------------编程问答-------------------- 这个问题很麻烦....前段时间没事情耽搁下来了把它忘了,重拾..寻求解决方案 --------------------编程问答-------------------- 我试了一下,如果返回的是字符串比如:"abcd....."是可以显示的,如果是数字转成字符串:"1234-56789"
就不能显示......但是如果我在返回的数字字符串钱加个字母,比如:"1234-56789"变成:"a1234-56789"就可以正常显示了,不知道是什么原因....
在显示到页面之前的最后一步的数据源比如是"37000" "3A000" "3A001" "3B000"...,但是到了前台显示的时候变成"undefined","3A000" "3A001" ...不能显示纯数字,哎。。。
求高手啊 --------------------编程问答-------------------- 菜鸟帮顶~~~
补充:.NET技术 , ASP.NET