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

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

  // 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; } 

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

如果您严格要求函数getHtml()返回(实际上call back )html作为输出,您可以使用callback ,否则您可以使用Nick建议的方式。

以下是如何使用回调: –

 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; } }); 

}

像这样调用函数 –

 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参数getHTML(instance,current_path,dir,callback)和被调用函数中的相应function(html){}部分。

这样,你实际上定义: –

  • 调用函数在输出就绪时call back调用函数
  • 并且调用者在接收call back时执行某些操作。

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

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

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

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

 success: doSomethingWithHtml,