ajax add_endRequest永远不会在iPad上激活

时间:2011-08-26 00:48:40

标签: ajax telerik

我有一些asp代码,其中我在单独的jQueryUI选项卡上有一组Telerik网格,我懒得加载网格数据,这样如果您实际查看包含它们的选项卡,网格只会绑定到实时数据。重新绑定导致ajax回发,并且我已经添加了一个endRequest处理程序,以便在请求返回后重新应用jQueryUI格式。这适用于Firefox,Chrome,Safari和IE。但是在iPad上,endRequest处理程序永远不会触发。有关如何排除故障的任何建议吗?

我的代码如下:

<script language="javascript" type="text/javascript">
    (function ($, Sys) {
        function setUpEmsDashboard() {
            $('#emsDashboard').dnnTabs().dnnPanels();

            $('#dInvoiceLink').click(function () {
                lazyLoadOutstandingInvoicesGrid();
            });

            if ($('#dInvoice').is(':visible')) {
                lazyLoadOutstandingInvoicesGrid();
            }

            $('#dCountsForStaffLink').click(function () {
                lazyLoadCountsForStaffGrids();
            });

            if ($('#dCountsForStaff').is(':visible')) {
                lazyLoadCountsForStaffGrids();
            }
        }

        $(document).ready(function () {
            setUpEmsDashboard();
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
                setUpEmsDashboard();
            });
        });
    } (jQuery, window.Sys));
</script>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
    <script language="javascript" type="text/javascript">
        function lazyLoadOutstandingInvoicesGrid() {
            var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>");
            var masterTableView = grid.get_masterTableView();
            var name = masterTableView.get_name();
            if (name == 'Temp Data') {
                masterTableView.rebind();
            }
            return true;
        }

        function lazyLoadCountsForStaffGrids() {
            var countsBySalesRegionGrid = $find("<%=CountsBySalesRegionGrid.ClientID%>");
            var cbsrMasterTableView = countsBySalesRegionGrid.get_masterTableView();
            var cbsrName = cbsrMasterTableView.get_name();
            if (cbsrName == 'Temp Data') {
                cbsrMasterTableView.rebind();
                return true;
            }
            var countsBySupplierTypeGrid = $find("<%=CountsBySupplierTypeGrid.ClientID%>");
            var cbstMasterTableView = countsBySupplierTypeGrid.get_masterTableView();
            var cbstName = cbstMasterTableView.get_name();
            if (cbstName == 'Temp Data') {
                cbstMasterTableView.rebind();
                return true;
            }
            var countsByCategoryGrid = $find("<%=CountsByCategoryGrid.ClientID%>");
            var cbcMasterTableView = countsByCategoryGrid.get_masterTableView();
            var cbcName = cbcMasterTableView.get_name();
            if (cbcName == 'Temp Data') {
                cbcMasterTableView.rebind();
            }
            return true;
        }
    </script>
</telerik:RadCodeBlock>

1 个答案:

答案 0 :(得分:0)

没关系,我发现了这个问题。我所拥有的是一种竞争条件,对于某些情况下某些浏览器,网格对象为空。

我改变了:

    function lazyLoadOutstandingInvoicesGrid() {
        var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>");
        var masterTableView = grid.get_masterTableView();
        var name = masterTableView.get_name();
        if (name == 'Temp Data') {
            masterTableView.rebind();
        }
        return true;
    }

为:

    function lazyLoadOutstandingInvoicesGrid() {
        var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>");
        if (typeof (grid) !== 'undefined' && grid != null) {
            var masterTableView = grid.get_masterTableView();
            var name = masterTableView.get_name();
            if (name == 'Temp Data') {
                masterTableView.rebind();
            }
            return true;
        }
    }

...并对其他功能进行了类似的更改。这防止了一直无声地导致主函数其余部分失败的对象引用错误。现在它始终如一。