如何让这个函数返回使用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,