如何将ajax返回值设置为变量

时间:2011-03-03 00:00:25

标签: php jquery ajax

我有以下成功执行的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。我错过了什么?

3 个答案:

答案 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

这个小代码更改,解决了我从早上起就遇到的问题。 :)