できません。取得は非同期です。getInstances
GET が完了する前に返されるためgetInstances
、データを返すことはできません。(以下の注記を参照してください。)
(少なくとも) 3 つのオプションがあります。
コールバックを使用する
後で入力される空のオブジェクトを返し、それを必要とするコードに定期的にポーリングさせます
同期取得を使用する (良い考えではありません)
1. コールバックを使用する
代わりにできることは、コールバックを受け入れ、データが到着したときにそれを呼び出すことです。
this.getInstances = function(component, callback) {
$.ajax({
url: "/rpc/alerts2/commonObj_rpc.cfc?method=getInstances",
data: {"component":component},
type: "POST",
async: true,
success: function(data) {
var getData = $.parseJSON(data);
console.log("hey");
var $render_component_instance = $("#instances").empty();
$("#instances").append($("<option />").val("all").text("All Instances (Summed)"));
$.each(getData, function (cIndex, cItem){
var $instance = $("<option />").val(cItem.si_instance).text(cItem.si_label.toUpperCase());
$render_component_instance.append($instance);
})
$("#instances").multiselect("refresh");
callback(getData);
}
});
};
そして、次のように呼び出します。
myGraph.getInstances(component, function(data) {
// Use the data here
});
2. 後で入力される空白のオブジェクトを返します
または、最初は空白のオブジェクトを返すこともできますが、後でプロパティとしてデータを追加します。以下のコメントから、これはあなたが探していたものに最も近いかもしれません。基本的に、関数の外部から関数のローカル変数にアクセスする方法はありませんが、オブジェクトを返し、後でそれにプロパティを追加することはできます。
this.getInstances = function(component) {
var obj = {};
$.ajax({
url: "/rpc/alerts2/commonObj_rpc.cfc?method=getInstances",
data: {"component":component},
type: "POST",
async: false, // <==== Note the change
success: function(data) {
var getData = $.parseJSON(data);
console.log("hey");
var $render_component_instance = $("#instances").empty();
$("#instances").append($("<option />").val("all").text("All Instances (Summed)"));
$.each(getData, function (cIndex, cItem){
var $instance = $("<option />").val(cItem.si_instance).text(cItem.si_label.toUpperCase());
$render_component_instance.append($instance);
})
$("#instances").multiselect("refresh");
// Make the data available on the object
obj.getData = getData;
}
});
return obj; // Will be empty when we return it
};
そして、次のように呼び出します。
var obj = myGraph.getInstances(component);
// ...later...
if (obj.getData) {
// We have the data, use it
}
else {
// We still don't have the data
}
3. 同期 get を使用する
これはお勧めしませんが、呼び出しを同期させることができます。同期 ajax リクエストは、jQuery の将来のバージョンではなくなることに注意してください。しかし、完全を期すために:
this.getInstances = function(component) {
var getData;
$.ajax({
url: "/rpc/alerts2/commonObj_rpc.cfc?method=getInstances",
data: {"component":component},
type: "POST",
async: false, // <==== Note the change
success: function(data) {
var getData = $.parseJSON(data);
console.log("hey");
var $render_component_instance = $("#instances").empty();
$("#instances").append($("<option />").val("all").text("All Instances (Summed)"));
$.each(getData, function (cIndex, cItem){
var $instance = $("<option />").val(cItem.si_instance).text(cItem.si_label.toUpperCase());
$render_component_instance.append($instance);
})
$("#instances").multiselect("refresh");
}
});
return getData;
};
そして、次のように呼び出します。
var getData = myGraph.getInstances(component);
繰り返しますが、私はそれを推奨していません。同期 ajax 呼び出しはブラウザーの UI をロックし、ユーザー エクスペリエンスの低下につながります。