2

2 つのアラートを表示する次のコードがあります。

function GetDepartment(){
    var dept;

    $.ajax({
        type: 'POST',
        url: 'return_string.asmx/GetDepartment',
        data: '{}',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function( department ) {

            if( department.d[0] ) {

                dept = department.d[0].code;
                alert( dept );

            } else {

                alert ( "null" );

            }
        },
        error: function(xhr, status, error) {

             var err = eval("(" + xhr.responseText + ")");
             alert(err.Message) ;

        }
    });

    return dept;
}

alert( GetDepartment() );

最初のアラートが表示されundefined、2 番目のアラートが表示されますMKTG

最初のアラートが表示されるのはなぜですか?undefinedまた、両方を表示するにはどうすればよいMKTGですか?

4

1 に答える 1

8

AJAX 呼び出しが同期している場合にのみ、希望どおりに機能します。async: falseこれについては、AJAX 呼び出しで指定できます。

$.ajax({
    type: 'POST',
    url: 'return_string.asmx/GetDepartment',
    ...
    async: false, /* new */
    ...
});

さらに良いのは、AJAX 呼び出しが UI スレッドをブロックせずに非同期で処理できるようにアプリを再構築し、コールバックを発行してアプリ固有のプロセスを続行できるようにすることです。

すなわち。何かのようなもの:

$.ajax({
    type: 'POST',
    url: 'return_string.asmx/GetDepartment',
    ...
    success: yourCallbackFunction,
    ...
});

// callback
function yourCallbackFunction(data) {
    // do stuff that depends on data
} 
于 2012-10-30T13:28:48.953 に答える