jQueryのajax()で返り値を得る方法

jQueryAjax()で返り値がとれない!?

こんなふうに書くと返り値はundefinedになってしまう。

function test(){
    $.ajax({
        type: 'GET',
        url: 'http://hoge.fuga'
        dataType: 'text',
        success: function(response){
            return response;
        },
    	error: function(response){
            return response;
    	});
}

var result = test(); // undefined

これはajax()がデフォルトでは非同期通信をするためである。非同期通信とは、レスポンスが返って来る前に次の処理に行くことである。だから返り値を返す前に次の処理に行ってしまう。

解決策

1. 同期通信にしちゃう

async: falseとすると、同期通信になる。

function test(){
    var result = $.ajax({
        type: 'GET',
        url: 'http://hoge.fuga',
        async: false
    }).responseText;
    return result;
}

var result = test() //ちゃんと返り値が入ってる;

でも同期通信の場合は時間がかかる処理をすると、その間UIがロックされてしまう。
なのであまりやらない方がいい。

2. .done(), .fail()をつかう

function test(){
    return $.ajax({
        type: 'GET',
        url: 'http://hoge.fuga'
    })
}

test().done(function(result) {
    なんか処理
}).fail(function(result) {
    なんか処理
});

これだと、非同期通信のまま返り値を得ることができる。こっちの方がおすすめ。