jquery变量范围从$.each开始



我对jquery中的php函数进行了AJAX调用
在更改select box时,我调用它来获取数据(它100%来自php)
然后,我进入$.each区域,将数据处理到列表中
该列表在txt变量中生成,但其作用域仅适用于$.each块。

如何将其传回外部(第二个console.log(txt);

$('#selectMain').on('change', function(){
    var txt = '';
    var argument = $('#selectMain').val();
    $.ajax({
        type: 'POST',
        url: './inc/ListManagerScripts.php?argument='+argument,
        success: function(json){
            var countries = [];
            var countries_uuid = [];
            data = $.parseJSON(json);
            $.each(data, function(key, value) {
                //append countries
                if($.inArray( value.country_uuid, countries_uuid ) == -1 ){
                    countries.push(value.country);
                    countries_uuid.push(value.country_uuid);
                    var txt = txt + addCountry(value.country, value.country_uuid);
                }
                console.log(txt);
            });
            console.log(txt);
        }
    });

    var addCountry = function(country, uuid){
        var snip = '';
        snip = snip + "<div class='expandListHeader'>";
        snip = snip + "<div class='expandListHeaderRow' ctryID='"+uuid+"'>"+country+"</div>";
        snip = snip + "</div>"
        snip = snip + "<div class='expandListContent'>";
        snip = snip + "<div class='expandListContentRow contentCol2'>";
        snip = snip + "</div>";
        snip = snip + "</div>";
        return snip;
    }

});

更改

var txt = txt + addCountry(value.country, value.country_uuid);

txt = txt + addCountry(value.country, value.country_uuid);

您正在$.each回调范围内重新声明变量,因此如果去掉声明,您将使用on回调内声明的声明。

编辑:

相关读数

在函数之前声明var txt;

在函数内部,使用txt = ...而不是var txt = ...

这将重用相同的变量。

因为您已经在$.each块中声明了var.txt,所以它的作用域在该块内。

要使$.外的txt每个块更改为以下

var txt;         
$.each(data, function(key, value) {
                //append countries
                if($.inArray( value.country_uuid, countries_uuid ) == -1 ){
                    countries.push(value.country);
                    countries_uuid.push(value.country_uuid);
                     txt = txt + addCountry(value.country, value.country_uuid);
                }
                console.log(txt);
            });

您将在$.each函数中重新定义txt变量。如果你想要它用于所有的数组元素,那么你可以使用另一个数组。

最新更新