首页新闻找找看学习计划

[AJAX] 怎样取出或返回success中的数据

0
悬赏园豆:30 [待解决问题]
 1 function testAjax(link){    
 2                 var array = {};            
 3                 $.ajax({
 4                     url : link,
 5                     success : function(result){
 6                         array = result.split("\r\n");    // problem            
 7                         //document.write(array[4] + '</br>');
 8                     }
 9                 });
10                 //document.write(array[4] + '</br>');    
11                 return array;        
12             }
13 
14 
15 var ajax_staff = {  
16                 parseJSON:function(result){
17                     $.each( result, function(i, row) {
18                                         
19                         var url = "http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=";
20                         var link = url.concat(row.uPIField);
21                         
22                         // lines 的值是undefined
23                         var lines = testAjax(link);
24                         
25                         $('#staff').append('<li><a href="#"><img src="" class=""/><h3>'+ row.uPIField + '</h3>'+ '</a></li>');
26                                             
27                     });
28                     $('#staff').listview('refresh');
29                 }
30             }
31 
32         

小弟刚开始学JavaScript和jQuery,上面的代码就是我遇到的问题,我试着从AJAX的success事件中取出得到的数据,存入数组lines中,但是lines的内容始终为空,希望有人能帮忙解决一下。

Frank Qin的主页 Frank Qin | 初学一级 | 园豆:172
提问于:2013-05-24 11:25
< >
分享
所有回答(4)
0

结果异步的,怎么可能能取到。

越天 | 园豆:26 (初学一级) | 2013-05-24 11:31

额,我的想法是从url中得到一个文本信息(vcf格式),然后存入一个数组,之后再做操作,现在就是卡在这里了,那有什么办法实现这个功能呢?

支持(0) 反对(0) Frank Qin | 园豆:172 (初学一级) | 2013-05-24 11:34

@Frank Qin: 

你存入数组的方法/代码需要放入

testAjax 这个方法中的
success 这个方法中。
支持(0) 反对(0) 越天 | 园豆:26 (初学一级) | 2013-05-24 11:36

@越天: 

能帮我稍微再讲一下吗?我刚开始学这个,不是很明白,我又试着写了下还是不行

支持(0) 反对(0) Frank Qin | 园豆:172 (初学一级) | 2013-05-24 11:54

@Frank Qin: 

把使用lines 的地方加入
testAjax 的
success 方法中
支持(0) 反对(0) 越天 | 园豆:26 (初学一级) | 2013-05-24 12:24
0

用AjaxPro吧和后端交互很方便的。js获取后端返回值和js传值给后端的ajax方法都很方便。

/// <summary>
        /// 获取当前登录用户的权限明细
        /// </summary>
        /// <returns></returns>
        [AjaxMethod]
        public List<string> GetPermission()
        {
            Guid userID = new Guid(Session["UserID"] as string);
            using(var db = new TWSDBEntities())
            {
                var userEntity = db.SystemUserEntity.Where(u => u.UserKeyID == userID).FirstOrDefault();
                userEntity.SystemRoleEntityReference.Load();
                var roleID = userEntity.SystemRoleEntity.RoleKeyID;
                var list = db.RolePermissionEntity.Where(p => p.RoleKeyID == roleID).ToList();
                List<string> resultList = new List<string>();
                foreach(RolePermissionEntity roleItem in list)
                {
                    resultList.Add(roleItem.PermissionID.ToString().ToUpper());
                }
                return resultList;
            }
        }

前端js:

  var array = {};            
    array = 后端命名空间.页面分部类名.方法名();

数据酷软件 | 园豆:128 (初学一级) | 2013-05-24 11:45
0

你不能把你的lines数组当做参数传入另一个方法进行处理吗?这个方法在success回调函数中调用就好了。。

 

倘若你想让你这段代码执行按照预期的话,那就使用同步好了。

 $.ajax({
      url : link,
      async : false,
      success : function(result){
      array = result.split("\r\n");    // problem            
          //document.write(array[4] + '</br>');
     }
})
滴答的雨 | 园豆:3690 (老鸟四级) | 2013-05-24 14:07

你好,我试了同步,但是lines里面一直是空的,关于回调函数的方法,我不是很了解,能具体教教我吗?

我想让success中得到的数据按照“\r\n”分组存进数组中返回

支持(0) 反对(0) Frank Qin | 园豆:172 (初学一级) | 2013-05-24 16:15

我现在试着写了下

function testAjax(lines, link){    
                $.ajax({
                    url : link,
                    success : function(result){
                        //array = result.split("\r\n");    // problem    
                        handleData(lines, result);    
                    }
                });    
            }
            
            function handleData(lines, data) {
                lines = data.split("\r\n");
                //document.write(lines[4] + '</br>');
            }

var ajax_staff = {  
                parseJSON:function(result){
                    $.each( result, function(i, row) {
                                        
                        var url = "http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=";
                        var link = url.concat(row.uPIField);
                        
                        var lines = {};
                        testAjax(lines, link);
                        //lines = testAjax(lines, link);
                        
                                                
//                        var txtFile = new XMLHttpRequest();
//                        txtFile.open("GET", link, false);
//                        txtFile.send(null);                
//                        lines = txtFile.responseText.split("\r\n");
                        //document.write(lines[4] + '</br>');
                        
                        $('#staff').append('<li><a href="#"><img src="" class=""/><h3>'+ lines[4] + '</h3>'+ '</a></li>');
                                            
                    });
                    $('#staff').listview('refresh');
                }
            }

可是lines里面还是空的,能帮我看看怎么修改吗?

支持(0) 反对(0) Frank Qin | 园豆:172 (初学一级) | 2013-05-24 16:49

@Frank Qin: lines你在哪定义的?你在哪用了?真是晕死。。。。

支持(0) 反对(0) 越天 | 园豆:26 (初学一级) | 2013-05-24 16:52

@Frank Qin: 

同步的要设置下面参数,这样你原函数var lines = testAjax(link);是可以获取到数据的

async : false,

或者====================================

你后面改的代码应该这样

function testAjax(lines, link){    
                $.ajax({
                    url : link,
                    success : function(result){
                        handleData(result);    
                    }
                });    
            }
            
            function handleData(data) {
                lines = data.split("\r\n");
                document.write(lines[4] + '</br>');
            }
支持(0) 反对(0) 滴答的雨 | 园豆:3690 (老鸟四级) | 2013-05-24 17:03
0

success的回调函数,单独写出来。

或者用楼上的同步方法

在大地画满窗子 | 园豆:102 (初学一级) | 2013-05-24 15:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册