我有以下成功执行的ajax调用:
function fnFormatDetails ( oTable, nTr )
{
var aData = oTable.fnGetData( nTr );
var memberid = 'memberid='+ aData[6];
$.ajax({
type: "POST",
url: "shout.php",
data: memberid,
success: function(html) {
//$("#shout").html(html);
var sOut = html.returned_val;
}
});
return sOut;
}
如果我删除注释掉的行($(“shout”)。html(html)并在我的页面上使用div,结果显示正常。但是,还有第二个函数可以使用来自sOut的HTML结果并相应地显示在适当的位置。
shout.php中的PHP文件只是“回显”HTML到页面(然后返回并相应地显示。
遗憾的是,我无法根据我的ajax调用结果设置变量sOut。我错过了什么?
答案 0 :(得分:5)
如果您希望函数返回AJAX调用返回的函数,则需要同步进行调用。此外,这是假设“shout.php”的结果是明文。如果是JSON或其他,则需要在调用dataType
时设置$.ajax
属性。
function fnFormatDetails ( oTable, nTr ) {
var aData = oTable.fnGetData( nTr );
var memberid = 'memberid='+ aData[6];
var result;
$.ajax({
type: "POST",
url: "shout.php",
data: memberid,
async: false,
success: function(data) {
result = data;
}
});
return result;
}
答案 1 :(得分:2)
首先,您要在成功回调方法中定义sOut,因此它不可用于fnFormatDetails。
其次默认情况下$ .ajax在异步模式下工作,因此每当调用“return sOut”时,成功回调就不会执行!
我建议你从成功中调用一些方法来完成基于html.returned_val的过程,或者你可以在$ .ajax中传递async:false来使该调用同步。
答案 2 :(得分:1)
谢谢你@Matt Huggins
async:false
这个小代码更改,解决了我从早上起就遇到的问题。 :)