jQuery ajax 成功コールバック関数の定義

jQuery ajaxを使ってサーバーからデータを取得したいのですが。

以下のように、成功コールバック関数の定義を .ajax() ブロックの外に置きたいと思います。では、サクセスコールバックから返されたデータを使用できるようにするために、以下のように変数dataFromServerを宣言する必要がありますか?

ほとんどの人が .ajax() ブロックの中で成功コールバックを定義しているのを見たことがあります。そこで、サクセスコールバックを外部で定義したい場合、以下のコードは正しいでしょうか?

var dataFromServer;  //declare the variable first

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData(dataFromServer)
    })
}

function handleData(data) {
    alert(data);
    //do some stuff
}
ソリューション

使うだけ。

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

success`プロパティは、関数への参照のみを必要とし、データをこの関数へのパラメータとして渡します。

このようにhandleData関数にアクセスできるのは、handleDataの宣言方法にあります。JavaScriptはコードを実行する前に関数宣言を解析しますので、実際の宣言よりも前のコードでその関数を使うことができます。 これをhoistingといいます。

ただし、このように宣言された関数はカウントされません。

var myfunction = function(){}

これらはインタプリタが渡したときにのみ利用可能です。

関数の2つの宣言方法についてはこの質問を参照

解説 (6)

成功ハンドラを以下のように書き換えてみてください。

success : handleData

ajaxメソッドのsuccessプロパティには、関数への参照しか必要ありません。

handleData関数では、3つまでのパラメータを取ることができます。

object data
string textStatus
jqXHR jqXHR
解説 (0)

書きます。

var handleData = function (data) {
    alert(data);
    //do some stuff
}

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}
解説 (1)