jquery:构造的数据未定义

时间:2015-02-18 18:21:11

标签: javascript jquery

我花了很多时间来解决这个问题,但没有找到任何东西,

    function constructAgenciesData() {       
        $.ajax({
           url: "getAgenciesAndGlobalJson.do",
               dataType: "json",
           success: function(data){
            $.each(data, function (index, row) { 
                  // console.log("data : "+ JSON.stringify(data));
                   $("#"+row.id).data("assignedAgencies", row.assignedAgencies).data("restOfAgencies", row.restOfAgencies).data("global", row.global).data("globalID", row.globalID);      
                  });    
                }        
         });  

   } 
   constructAgenciesData();
   $(function($){ 

      $(".globalswitch").each(function () {
         var idRow = $(this).parents('tr')[0].id;
         alert(idRow);
         console.log($('#'+idRow).data("global"));// <-- UNDEFINED
        $(this).switchButton({
            checked: row.data("global") 
        });
    });

     $(document).on('click','button.btn', function () {     
        var idRow = $(this).parents('tr')[0].id;  
        var title = $(this).parents('td:first').siblings(':eq(1)').text();
        title = "Rule Name :  " + title;
        $("#divPopUp").data('param_1', idRow);
        $("#divPopUp").data('opener', this).dialog("option", "title", title).dialog("open");
        console.log($('#'+idRow).data("global"));// <-- WORKING
        var old_array = $('#'+idRow).data("restOfAgencies"); 
        var new_array = $('#'+idRow).data("assignedAgencies"); 
        addCheckbox(diff(old_array,new_array));

    });


    });

我不知道为什么会这样:

console.log($('#'+idRow).data("global"));

.each函数中未定义。

但它正在点击功能中工作。

1 个答案:

答案 0 :(得分:0)

您的$.ajax电话是异步的。这意味着在正在运行Javascript的其余部分时它正在触发请求。

success中的constructAgenciesData()功能可能尚未在IIFE $(function($){之前完成。

因此,无法保证在.data('global')循环中尝试访问$(".globalswitch").each时设置$(".globalswitch").each

此问题的解决方案是将globalSwitchLoop()循环包含在函数$.ajax中,并在{{1}}调用成功时触发该循环。

另外,请查看jQuery's promises