javascript - 这段代码有什么错误?

时间:2016-11-29 08:03:04

标签: jquery

这是一个运行良好的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

3 个答案:

答案 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 = "";

因此,如果您正在寻找要打印到控制台的内容,那么它只是空白区域,因此不会显示任何内容。