写了一个带有ajax的javascript函数返回值出现了问题
function tra(tracename, Listname) {
var comments="";
$.post("../Ctrl/GetComments.ashx", { "tracename": tracename, "Listname": Listname, "CatId": "" }, function(data, status) {
if (status != "success") {
$("#" + lblAdmin).append($("<li>加载失败!</li>"));
return;
}
else {
var lines = data.split("$");
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
var fields = line.split("|");
var comment = $("<li><button id=" + fields[0] + ">删除</button><a href=UI.aspx?action=UPDATE&Listname=" + Listname + "&Itemid=" + fields[0] + ">" + fields[1] + "发帖日期:" + fields[2] + "</a></li>");
$("a[id=" + fields[0] + "]").attr({ "href": fields[0], "target": "_self" });
comments += comment.html();
}
return comments;
}
alert(comments);
});
}
$(function() { alert(tra("ESite", "T_News")); });
$("#T_News").html(tra("ESite", "T_News"))
alert(tra("ESite", "T_News"));
最上面的tra函数可以运行,运行之后可以alert出comment里的内容,但是就是不能return出comments
在最后的alert(tra("ESite", "T_News"))的结果是undefind紧上面的也没有好结果。
------解决方案--------------------
多次看到这种问题
建议了解一下什么是异步执行,及回调函数的意义,不然你连代码有没有执行都不知道
你的想法是无法实现的,不然jquery就可以给你提供一个函数,让你传入参数,给你返回ajax获取的值了,哪里还要你来写?
jqury为什么不提供这样的函数?其他框架也是这样,难道你认为写框架的大牛们疏忽了么?
这是无法实现的,ajax异步执行,无法预料返回的时间,所以不可能把主线程阻塞在这等待返回值(甚至可能通讯失败,一直等待直至超时),于是又了回调机制,主线程可以继续执行,页面也就不会死这儿
你这儿的正确写法应该是:
function tra(tracename, Listname,callback) {//传递一个函数,用以在ajax回调函数中获得值
var comments="";
$.post("../Ctrl/GetComments.ashx", { "tracename": tracename, "Listname": Listname, "CatId": "" }, function(data, status) {
if (status != "success") {
$("#" + lblAdmin).append($("<li>加载失败!</li>"));
return;
}
else {
var lines = data.split("$");
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
var fields = line.split("|");
var comment = $("<li><button id=" + fields[0] + ">删除</button><a href=UI.aspx?action=UPDATE&Listname=" + Listname + "&Itemid=" + fields[0] + ">" + fields[1] + "发帖日期:" + fields[2] + "</a></li>");
$("a[id=" + fields[0] + "]").attr({ "href": fields[0], "target": "_self" });
comments += comment.html();
}
//return comments;//这儿被返回的函数是ajax的回调函数而不是你的函数,搞清楚
callback(comments);//把需要的值传递到回调函数
}
alert(comments);
});
}
$(function() { tra("ESite", "T_News",
function(comments){alert(comments);})//在该函数中就可以使用获取的值
});
tra("ESite", "T_News",function(comments){$("#T_News").html(comments)})