无法在getJSON函数之外获取正确的变量值

时间:2015-12-12 11:30:20

标签: jquery function scope getjson

我有一个名为items的变量。   如果我在getjson函数中访问它的值,我得到正确的值。 但如果我在getJSON函数之外访问它的值,我会得到字符串空值。 我需要你的帮助来了解什么是问题。 谢谢你的帮助!提前

http://xxxx/mjpg/video.mjpg

2 个答案:

答案 0 :(得分:1)

当你显示getJSON变量之外的项的值时,它是正常的,因为它在$ .getJSON方法的成功回调时获取其值,换句话说,你想在初始化时以同步模式显示它并取其值在异步模式下,你可以通过使用.done()来解决这个问题,你的代码将变成如下:

$("#CityId").click(function () {
            var htmlText = "<ul class=ulList>";
            var mainDiv = $('.divCounties');
        var items = "";

            for (var i = 0; i < arrCity.length; i++) {

                htmlText += "<li class=ilceCaption>" + arrCity[i].text; // +"</li>";

                htmlText += "<ul>";

                $.getJSON("../Adds/GetCounties", { cityId: arrCity[i].value },
            function (data) {

                $.each(data, function (i, state) {
                    items += state.Text;
                //htmlText += "<li>" + state.Text + "</li>";

                }); 
    console.log(items); **// ==> is getting correct value in this line**                
            }).done(function() {
    console.log( "second success" );
    console.log(items);
  });

            htmlText += "</ul>";
            htmlText += "</li>";


            }

            htmlText += "</ul>";
            console.log(htmlText);

      mainDiv.html(htmlText);

答案 1 :(得分:0)

您应该使用承诺完成功能:

$("#CityId").on('click',function(e){
    e.preventDefault();
    var htmlText = "<ul class=ulList>";
    var mainDiv = $('.divCounties');
    var items = "";
    for (var i = 0; i < arrCity.length; i++) {
        htmlText += "<li class=ilceCaption>" + arrCity[i].text; // +"</li>";
        htmlText += "<ul>";
        $.getJSON("../Adds/GetCounties", {cityId: arrCity[i].value }, function(data){
            $.each(data, function(i, state) {
                items += state.Text;
                //htmlText += "<li>" + state.Text + "</li>";
            }).promise().done(function(){
                console.log(items);
            })
        });
        htmlText += "</ul>";
        htmlText += "</li>";
        console.log(items);
    }
    htmlText += "</ul>";
    console.log(htmlText);
    mainDiv.html(htmlText);
});

How to Jquery each complete