如何让这个函数返回使用jQuery.ajax检索的值?

时间:2010-09-12 18:08:08

标签: javascript jquery

我需要返回动态加载的内容。我认为这是实现它的方法,但该函数返回空白。要使用从htmlCode检索到的html代码设置jQuery.ajax,我需要做什么?

  // Get directory listing
  function getHTML(instance, current_path, dir) {
    var htmlCode = '';

      jQuery.ajax({
          type: "POST",
          url: "../wp-content/plugins/wp-filebrowser/jquery.php",
          dataType: 'html',
          data: {instance: instance, current_path: current_path, dir: dir},
          success: function(html){
              htmlCode = html;
          },
          error: function(e) {
            htmlCode = '[Error] ' + e;
          }
      });

      return htmlCode;
  }

2 个答案:

答案 0 :(得分:5)

这种情况正在发生,因为ajax请求需要一些时间才能获得html,并且在html准备好之前会触发return语句。 Javascript代码执行不等待你的html返回。您实际上可以通过删除返回并发出两个警报来查看此信息。在成功事件中放置一个alert,在放置返回语句的位置放置一个alert。第二个callback之前会提醒。因此,即使你的html被提取,它也永远不会成功返回到调用函数,因为时间html已经触发的return语句已准备就绪。

如果您严格要求函数getHtml()返回(实际上call back)html作为输出,您可以使用function getHTML(instance, current_path, dir,callback) { var htmlCode = ''; jQuery.ajax({ type: "POST", url: "../wp-content/plugins/wp-filebrowser/jquery.php", dataType: 'html', data: {instance: instance, current_path: current_path, dir: dir}, success: function(html){ callback(html); //instead of a return }, error: function(e) { htmlCode = '[Error] ' + e; } }); ,否则您可以使用Nick建议的方式。

以下是如何使用回调: -

getHTML(instance, current_path, dir,
    function(html)
    {
        //Write code to use the html here - this will run when the getHTML() function does callback with the output html
    }
);

}

像这样调用函数 -

callback

注意函数定义中的function(html){}参数getHTML(instance,current_path,dir,callback)以及被调用函数中相应的call back部分。

这样,你实际上定义了: -

  • 当输出准备就绪时调用函数call back调用函数
  • 并且调用者在收到{{1}}时执行某些操作。

答案 1 :(得分:3)

这是一个异步操作,所以你不能真的这样返回...不是没有让请求同步(async: true选项),但我建议反对这个...因为它锁定了浏览器请求的持续时间。您无法返回,因为success回调(异步时)在请求运行后以后时才会发生,因此您的htmlCode = html;代码尚未运行。

一旦准备好数据,这是一种更好的方法来调用success回调所需的内容,例如:

success: function(html){
  doSomethingWithHtml(html);
},

或更简洁地针对该特定的单行案例:

success: doSomethingWithHtml,