残念ながら、非同期コールバックをラップする関数に値を返すことはできません。代わりに、AJAXリクエストからの成功コールバックは、データと制御を別の関数に渡します。この概念を以下に示しました。
myFunctionの定義:
// I added a second parameter called "callback", which takes a function
// as a first class object
function myFunction(data, callback) {
var result = false;
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "url",
data: data,
error: function(data){
result = false;
// invoke the callback function here
if(callback != null) {
callback(result);
}
// this would return to the error handler, which does nothing
//return false;
},
success: function(data){
result = true;
// invoke your callback function here
if(callback != null) {
callback(result);
}
// this would actually return to the success handler, which does
// nothing as it doesn't assign the value to anything
// return true;
}
});
// return result; // result would be false here still
}
コールバック関数の定義:
// this is the definition for the function that takes the data from your
// AJAX success handler
function processData(result) {
// do stuff with the result here
}
myFunctionを呼び出します。
var data = { key: "value" }; /* some object you're passing in */
// pass in both the data as well as the processData function object
// in JavaScript, functions can be passed into parameters as arguments!
myFunction(data, processData);