我需要返回动态加载的内容。我认为这是实现它的方法,但该函数返回空白。要使用从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;
}
答案 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 :(得分:3)
这是一个异步操作,所以你不能真的这样返回...不是没有让请求同步(async: true
选项),但我建议反对这个...因为它锁定了浏览器请求的持续时间。您无法返回,因为success
回调(异步时)在请求运行后以后时才会发生,因此您的htmlCode = html;
代码尚未运行。
一旦准备好数据,这是一种更好的方法来调用success
回调所需的内容,例如:
success: function(html){
doSomethingWithHtml(html);
},
或更简洁地针对该特定的单行案例:
success: doSomethingWithHtml,