这是一个运行良好的JavaScript代码的一部分。 但我想在// Ex2行中显示变量选项:
if(profId==10){
//alert(profId);
$("#div_sel_residentType").show( "slow" );
var selectElm="<label for=\"sel_residentType\">Sélectionniez le Type du Résident:</label><select class=\"form-control\" id=\"sel_residentType\"><option value=\"0\" selected=\"\">Type Résident</option>";
var options ="";
$.get("../api/v1/get/menus/typeresident.json.php", function(dataset, status){
for (var index in dataset){
options = options + "<option value=\""+dataset[index].id+"\">"+dataset[index].description+"</option>";
//console.log(options);
}
console.log(options);//Ex1
});
console.log(options);//Ex2
selectElm = selectElm + options + "</select>";
//console.log(selectElm);
//$("#div_sel_residentType").html(selectElm);
}
我想了解为什么它显示console.log(options);//Ex1
但不显示console.log(options);//Ex2
答案 0 :(得分:1)
$.get(...)
启动异步调用。因此,执行将继续使用以下语句,并且仅在稍后(一旦GET请求完成)将执行回调。
所以{<1}}行在 console.log(options);//Ex2
填充之前执行。所以它等同于options
。
答案 1 :(得分:1)
ajax调用是async
,意味着此时Ex2
上不存在该值。解决方法是使用deferred
对象查看此页面:DOC
链接示例:
由于jQuery.get方法返回一个派生的jqXHR对象 从Deferred对象中,我们可以使用the附加成功回调 .done()方法。
代码中的完整示例:
var options = "";
var defObj = $.get("../api/v1/get/menus/typeresident.json.php", function(dataset, status) {
for (var index in dataset) {
options = options + "<option value=\"" + dataset[index].id + "\">" + dataset[index].description + "</option>";
//console.log(options);
}
console.log(options); //Ex1
});
// get something done after ajax respone
defObj.done(function() {
console.log(options); //Ex2
selectElm = selectElm + options + "</select>";
});
或者您可以单行完成:
$.get(/*...*/).done(/*...*/);
答案 2 :(得分:0)
console.log(options); //Ex2
这实际上先执行。并查看变量options
的定义方式:
var options = "";
因此,如果您正在寻找要打印到控制台的内容,那么它只是空白区域,因此不会显示任何内容。