【问题标题】:jQuery return ajax success function resultsjQuery返回ajax成功函数结果
【发布时间】:2011-11-18 06:01:11
【问题描述】:

我需要从 ajax 成功函数的结果中向我的 alert() 返回 true 或 false。但是,我遇到了问题,因为 alert() 结果始终是“未定义”...关于如何解决此问题的任何想法?

我有 DoAjax 作为它自己的函数,因为我在 .js 文件中多次调用它。

var val = '12345';  
alert( DoSerialVerification( val ) ); //this returns 'undefined' regardless of cType.length

function DoSerialVerification( piVal ){
    var fSuccess = function( oData ){
        var cType = oData.type
        if( cType.length > 0 ){
           alert( cType );                  //with piVal = 12345 cType will return 'MODULE'
           $('#dialog-1').attr('type', cType);
           return true;
        } else {
           return false;
        }
    };
    DoAjax({ Action: "DoSerialVerification", Value: piVal }, fSuccess );
}

function DoAjax( pAjaxParams, pSuccess ){
    $.ajax({url        : 'procedures?',
            data       : pAjaxParams,
            async      : false,
            type       : "POST",
            dataType   : "json",
            error      : function(oD,oT,oE){ alert( oD+'\n'+oT+'\n'+oE ) },
            success    : pSuccess
    });
}

【问题讨论】:

  • 您确认procedures? 正在返回数据吗?
  • @IAbstractDownVoteFactory - 是的程序正在返回“模块”

标签: jquery ajax return


【解决方案1】:

您需要从 DoSerialVerification 函数返回一些内容... 修改 DoSerialVerification 函数:

function DoSerialVerification( piVal ){
    // here
    var result = false;

    var fSuccess = function( oData ){
        var cType = oData.type
        if( cType.length > 0 ){
           alert( cType );                  //with piVal = 12345 cType will return 'MODULE'
           $('#dialog-1').attr('type', cType);

           //here
           result = true;
        }
    };
    DoAjax({ Action: "DoSerialVerification", Value: piVal }, fSuccess );

    //here
    return result;
}

【讨论】:

  • @Elliot Nelson:jQuery 支持同步 ajax,为此使用了“async: false”选项。
  • '因为 DoSerialVerification 什么也没返回,但它必须返回。我猜你希望嵌套的 fSuccess 函数将其结果传播到 DoSerialVerification...但是不,fSuccess 的结果没有传播。
【解决方案2】:

您尝试做的事情是不可能的:调用 AJAX 是一个异步过程,您的函数 DoAjax 将在从服务器收到响应之前返回。这就是您提供回调的原因:一旦服务器返回响应,它将根据结果输入您的错误回调或成功回调。

改变这个:

alert( DoSerialVerification( val ) );

到这里:

DoSerialVerification(val);

然后将您的警报调用移动到您的“fSuccess”函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多