【问题标题】:can not get correct value of variable outside of getJSON function无法在 getJSON 函数之外获得正确的变量值
【发布时间】:2015-12-12 11:30:19
【问题描述】:

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

$("#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>";
            }); 
            console.log(items); // ==> is getting correct value in this line**    
        });
        htmlText += "</ul>";
        htmlText += "</li>";
        console.log(items); // ==> is getting string empty value in this line**
    }
    htmlText += "</ul>";
    console.log(htmlText);
    mainDiv.html(htmlText);
});

【问题讨论】:

  • 你可以通过使用 .done() 来解决这个问题,看看我的回答

标签: jquery function scope getjson


【解决方案1】:

当您在 getJSON 变量之外显示项目的值时,它通常为空,因为它在 $.getJSON 方法的成功回调中获取它的值,换句话说,您希望在初始化时以同步模式显示它并获取它value 在异步模式下,你可以通过使用 .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);

【讨论】:

    【解决方案2】:

    你应该使用promisedone函数:

    $("#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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多