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的内容始终为空,希望有人能帮忙解决一下。
结果异步的,怎么可能能取到。
额,我的想法是从url中得到一个文本信息(vcf格式),然后存入一个数组,之后再做操作,现在就是卡在这里了,那有什么办法实现这个功能呢?
@Frank Qin:
你存入数组的方法/代码需要放入
testAjax 这个方法中的
success 这个方法中。
@越天:
能帮我稍微再讲一下吗?我刚开始学这个,不是很明白,我又试着写了下还是不行
@Frank Qin:
把使用lines 的地方加入
testAjax 的
success 方法中
用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 = 后端命名空间.页面分部类名.方法名();
你不能把你的lines数组当做参数传入另一个方法进行处理吗?这个方法在success回调函数中调用就好了。。
倘若你想让你这段代码执行按照预期的话,那就使用同步好了。
$.ajax({ url : link, async : false, success : function(result){ array = result.split("\r\n"); // problem //document.write(array[4] + '</br>'); } })
你好,我试了同步,但是lines里面一直是空的,关于回调函数的方法,我不是很了解,能具体教教我吗?
我想让success中得到的数据按照“\r\n”分组存进数组中返回
我现在试着写了下
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里面还是空的,能帮我看看怎么修改吗?
@Frank Qin: lines你在哪定义的?你在哪用了?真是晕死。。。。
@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>'); }
success的回调函数,单独写出来。
或者用楼上的同步方法