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紧上面的也没有好结果。

解决方案 »

  1.   

    多次看到这种问题
    建议了解一下什么是异步执行,及回调函数的意义,不然你连代码有没有执行都不知道你的想法是无法实现的,不然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)})