Javascript 代码内部变量的问题
我有一个如下所述的代码,请问如何使用以下代码获取(getData)的值:Javascript 代码内部变量的问题,javascript,jquery,Javascript,Jquery,我有一个如下所述的代码,请问如何使用以下代码获取(getData)的值: var instanceArray = myGraph.getInstances(component) 我想myGraph.getInstances(component.getData可以,但失败了 this.getInstances = function(component) { var getData = {}; $.ajax({ url: "/rpc/alerts2/
var instanceArray = myGraph.getInstances(component)
我想myGraph.getInstances(component.getData
可以,但失败了
this.getInstances = function(component) {
var getData = {};
$.ajax({
url: "/rpc/alerts2/commonObj_rpc.cfc?method=getInstances",
data: {"component":component},
type: "POST",
async: true,
success: function(data) {
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");
}
});
};`
this.getInstances=函数(组件){
var getData={};
$.ajax({
url:“/rpc/alerts2/commonObj_rpc.cfc?method=getInstances”,
数据:{“组件”:组件},
类型:“POST”,
async:true,
成功:功能(数据){
getData=$.parseJSON(数据);
console.log(“嘿”);
var$render_component_instance=$(“#instances”).empty();
$(“#实例”).append($(“”).val(“全部”).text(“所有实例(求和)”);
$.each(获取数据、函数(cIndex、cItem){
var$instance=$(“”).val(cItem.si_实例).text(cItem.si_label.toUpperCase());
$render\u component\u instance.append($instance);
})
$(“#实例”).multiselect(“刷新”);
}
});
};`
您不能,get是异步的getInstances
在GET完成之前返回,因此getInstances
不可能返回数据。(详见下文注释。)
您(至少)有三种选择:
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);
}
});
};
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
};
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;
};
但是,我不主张这样做。同步ajax调用会锁定浏览器的UI,导致糟糕的用户体验。您使用的是什么框架?什么是myGraph?myGraph只是一个瞬间的复制品。你能解释这个调用吗please@deetu:很乐意,但具体是什么…?我知道我可以使用synchronous轻松获取数据,但我只是尝试检索getdata,因此实例不需要在之后运行这些行it@deetu:对不起,我不懂那句话。“…所以实例不需要在它后面运行行…”是什么意思?我只需要getData中的数据,仅此而已
var obj = myGraph.getInstances(component);
// ...later...
if (obj.getData) {
// We have the data, use it
}
else {
// We still don't have the data
}
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);