如何使ajax调用div更新等到它完成

时间:2016-03-08 13:03:56

标签: javascript jquery ajax

我使用融合图表,所以在融合图表链接事件我有以下代码

if (eventObject.eventType == "linkeditemopened") {
   var url = "/" + $("#appName").val() + "/reports/getUserFilter?isSelectedLegends=true&isSelected=false&isDuplicateReq=true"          
   $('#legendListIdDiv').load(url);
   loadMultiselectDropdown()
}

和下面的loadMultiselectDropdown()方法

function loadMultiselectDropdown(){
    alert('called load mil')
    var filterList1= $("#updatedlegendListId").val();
    var filterList= $("#legendListId").val();
    alert('type-- '+typeof filterList)
    console.log('filterList1-- '+filterList)
    alert('type-- '+typeof filterList1)
    console.log('filterList1-- '+filterList1)
    var filterList= $("#legendListId").val();
    if(!filterList1 == ''){
        $("#impact-report-user-filter-dropdown-div").show();
        $("#impact-report-user-filter-dropdown").multiselect({ 
              noneSelectedText: 'Select Legends',
              selectedText: '# Legends Selected'
        });
        for(f in filterList1){
            $('#impact-report-user-filter-dropdown').append($('<option>', {
                 value: filterList[f],
                 text:  filterList[f]
            }));
        }
        $("#impact-report-user-filter-dropdown").multiselect("refresh"); 
    }
}

但是在console.log('filterList1-- '+filterList1)行,我得到了undefined而不是一些值作为字符串。

这是dom

`<div id="legendListIdDiv">
    <input type="hidden" name="updatedlegendList" id="updatedlegendListId" value="Hyderabad Factory,Delhi Registered Office,Mumbai Warehouse,Bangalore Development Centre,">
</div>`

为什么?我猜是因为在执行var filterList1= $("#updatedlegendListId").val();

之前没有完成ajax

如何克服?

1 个答案:

答案 0 :(得分:2)

调用loadMultiselectDropdown()作为load()的回调:

if (eventObject.eventType == "linkeditemopened") {
   var url = "/" + $("#appName").val() + "/reports/getUserFilter?isSelectedLegends=true&isSelected=false&isDuplicateReq=true"          
   $('#legendListIdDiv').load(url,loadMultiselectDropdown);
}

Ajax请求是异步的,因此您必须等待它结束才能使用结果。在您的代码中,您在拨打电话后立即致电loadMultiselectDropdown(),这意味着在您拨打loadMultiselectDropdown()时请求结果尚未就绪。