pageshow vs pageinit,为什么我的页面使用pageshow成功加载,而不是pageinit

时间:2014-01-30 11:41:06

标签: javascript jquery ajax web-services

我正在为黑莓7开发一个网络应用程序,我遇到了一个有趣的dillema。我在普通浏览器(Chrome)中运行的代码非常完美,但设备浏览器却没有。

我有一个需要在pageinit上调用的webservice调用。奇怪的是这个。电话和一切在页面显示上完美运行,但不在pageinit上。如果我在pageinit上执行服务,webservice调用(Get Policies)会成功执行,然后它永远不会继续使用pageinit中的其余代码。

$('#ClaimsPage').bind('pageinit', function() {
    GetPolicies();
    //Never gets back to this point after completing the GetPolicies Function
    if (sessionStorage.wasSuccessful == 'true') {
        PolicyListBuilder(JSON.parse(sessionStorage.Policies));
    } else {
        goBack();
    }
            });

我的网络服务电话很简单,如下所示。

function GetPolicies() {
    showBusy("Retrieving Policies...");
    $.ajax({
        async: false,
        beforeSend: function (request) {
            request.setRequestHeader("Device", reportingDeviceId);
            request.setRequestHeader("Authorization", getAuth64());                
        },
        type: 'GET',
        url: PolicyGetWsUrl(),
        success: function (resultMessage) {
            sessionStorage.wasSuccessful = resultMessage.WasSuccessful;
            if (resultMessage.WasSuccessful == true) {
                sessionStorage.Policies = JSON.stringify(resultMessage.PolicyList);
                hideBusy();
            } else {
                alert(resultMessage.Description);
            }
        },
        error: genErrorMessage
    });
    hideBusy();
}

PolicyListBuilder函数正确执行,如果我使用

   $('#ClaimsPage').bind('pageshow', function()...

该程序运行得很好,但我宁愿在pageinit上使用它。我也尝试使用.on()而不是.bind()

有没有我错过的东西?

提前感谢您的帮助。

修改

我还应该注意到,我在同一个应用程序中使用了pageinit其他一些地方,它们似乎完美无缺。这很奇怪。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

好的,我做了一些研究并发现了一些事情。

pageinit在整个DOM加载之前发生,因此如果你引用控件,它可能还不存在,从而失败。

有一种解决方法。你可以使用.delegate()或$(document).ready()......它们都可以使用。如果有人有更好的答案,我会保持这个。