2016-11-29 1 views
0

これは正常に動作しているJavaScriptコードの一部です。 しかし、私は// Ex2のラインで変数のオプションを表示したい:javascript - このコードのエラーは何ですか?

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

'Ex2'は' $ .get'呼び出しの直後に実行されます。 'Ex1'は、呼び出しが応答を受け取った後に実行されます。 –

+0

'$ .get'は非同期です。つまり、応答が利用可能になると、それに渡す関数が呼び出されます。その間、あなたのコードはすでに実行され、// Ex2に来ますが、optionsはまだ ""です。 – connexo

答えて

1

これは、その時点でEx2に値が存在しないことを意味するasyncというajax呼び出しです。リンクからDOC

例:そのためのソリューションは、このページを見てみましょうdeferredオブジェクトを使用することです

jQuery.get方法は、繰延オブジェクトから を派生さjqXHRオブジェクトを返すので、 .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(/*...*/); 
1

$.get(...)を表示する理由を理解したいと思いますが非同期呼を開始します。したがって、実行は次のステートメントで継続され、コールバックが実行されるのは後で(GET要求が完了した時点でのみ)実行されます。

したがって、console.log(options);//Ex2行は、の前に実行され、optionsが入力される前に実行されます。したがって、console.log("")に相当します。

+0

はい..それは本当です.. $ get()の後にコールバックを作る方法? – zwitterion

+0

私はちょうど.done()を入れて解決しました。ありがとう – zwitterion

0
console.log(options); //Ex2 

これは実際に最初に実行されます。

var options = ""; 

コンソールに印刷するために何かを探している場合は何も表示されませんので、だから、それはただの空白です:そして、変数optionsが定義されているかに見えます。

関連する問題