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(){}
これらはインタプリタが渡したときにのみ利用可能です。