jQuery возвращает результаты функции успеха ajax - PullRequest
0 голосов
/ 16 сентября 2011

Мне нужно вернуть true или false в мое оповещение () по результатам функции успеха ajax. Однако у меня возникают проблемы, так как результат 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
    });
}

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

вам нужно что-то вернуть из функции 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;
}
0 голосов
/ 16 сентября 2011

То, что вы пытаетесь сделать, невозможно: вызов AJAX - это асинхронный процесс, ваша функция DoAjax вернется до того, как ответ будет получен от сервера.Вот почему вы предоставляете обратные вызовы: как только сервер вернет ответ, он введет либо ваш обратный вызов с ошибкой, либо ваш успешный обратный вызов в зависимости от результата.

Измените это:

alert( DoSerialVerification( val ) );

На это:

DoSerialVerification(val);

А затем переведите ваш вызов в функцию «fSuccess».

...