日期:2014-05-17  浏览次数:20442 次

js调用后台方法返回dataset
后台方法:
C# code
 
       [AjaxMethod]
        public DataSet GetData(string UserName)
        {
            DataSet ds = new DataSet();
            DataTable users= Search.ByUsername(UserName);
            ds.Tables.Add(users);
            return ds;    
        }


JS调用:
JScript code

         function showinfo() { 
             var username =$.trim($("#txtUsername").val());
             UserManage.UserEdit.GetData(username, function (r) {
                 $("#seluser").empty();
                 var ds = r.value;
                 if (ds.Tables[0].Rows.length > 0){
                     $("#Dialoge").show();
                     var Select = $("#seluser");//id为seluser的select控件
                     for (var i = 0; i < r.value.Tables[0].Rows.length; i++) {
                         var opt = new Option(ds.Tables[0].Rows[i]["UserName"] , ds.Tables[0].Rows[i]["age"]);
                         Select [0].options.add(opt);
                     }
                 }
                 else { $("#Dialoge").hide(); }
             });
         }


前台调用:
C# code
<input id="txtUsername"  runat="server" onkeyup="showinfo()" />

 
在输入框里输入文字,有时会出现这样的问题:
Uncaught TypeError:Cannot read property 'Tables' of null
我查了好久,也不知道是为什么?希望能得到好心人的帮助~~

------解决方案--------------------
在keyup事件中执行ajaxpro方法好像快了一点,应该是动态页没处理好并发导致出错,而你代码没有判断是否出错,而直接使用Tables导致出错了。

增加错误检查
JScript code
        function showinfo() { 
             var username =$.trim($("#txtUsername").val());
             UserManage.UserEdit.GetData(username, function (r) {
if(r.error){alert('动态页出错\n'+r.error.message);return false;}/////////
                 $("#seluser").empty();
                 var ds = r.value;
                 if (ds.Tables[0].Rows.length > 0){
                     $("#Dialoge").show();
                     var Select = $("#seluser");//id为seluser的select控件
                     for (var i = 0; i < r.value.Tables[0].Rows.length; i++) {
                         var opt = new Option(ds.Tables[0].Rows[i]["UserName"] , ds.Tables[0].Rows[i]["age"]);
                         Select [0].options.add(opt);
                     }
                 }
                 else { $("#Dialoge").hide(); }
             });
         }