Ajax jQuery Mobile在Phonegap deviceready中未构建第一个动态页面

Ajax jQuery Mobile在Phonegap deviceready中未构建第一个动态页面,ajax,cordova,jquery-mobile,hybrid-mobile-app,Ajax,Cordova,Jquery Mobile,Hybrid Mobile App,我有一个使用jqm1.3.0和Phonegap的移动应用程序。该应用程序进行web服务调用,并使用AJAX填充所有页面的内容。在浏览器中开发并直接调用脚本时,一切正常: applicationScripts() function applicationScripts(){ $(document).on("pageinit", "#page1, #page2, #page3, #page4, #page5", function() { $.ajax({

我有一个使用jqm1.3.0和Phonegap的移动应用程序。该应用程序进行web服务调用,并使用AJAX填充所有页面的内容。在浏览器中开发并直接调用脚本时,一切正常:

applicationScripts()

function applicationScripts(){

    $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {

        $.ajax({
            //make call and populate content.
        })
    });
}
但是,一旦我从deviceready侦听器内部调用该函数,#page1就不会获取数据。第2-5页很好用。(我还尝试将事件侦听器嵌套在
函数中,但结果类似。)

这是我文件的标题。我所有的脚本都在application.js文件中

<script type="text/javascript" src="js/cordova.ios.js"></script>    
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.mobile-1.3.0.min.js"></script>
<script src="js/application.js" ></script>


我不知道这是否是一些文件/事件在其他文件/事件之前加载的时间问题,但似乎我已经尝试了脚本顺序和调用“deviceready”的各种方式的所有可能组合。感谢您的帮助

我已经完成了两个PhoneGap项目,并且从未绑定
deviceready
函数中的页面事件

只需在js文件中绑定页面事件。它很好用。毕竟,我有3个PhoneGap项目在生产中运行,没有一个项目因为这个原因报告了问题

我在我的项目中使用了
devicerady
功能来禁用后退按钮,而不是初始化任何页面等


希望这对您有所帮助。

您可以尝试以下代码:

var deviceReadyDeferred = $.Deferred();
var jqmReadyDeferred = $.Deferred();

document.addEventListener("deviceReady", deviceReady, false);

function deviceReady() {
  deviceReadyDeferred.resolve();
}

$(document).one("mobileinit", function () {
  jqmReadyDeferred.resolve();
});

$.when(deviceReadyDeferred, jqmReadyDeferred).then(doWhenBothFrameworksLoaded);

function doWhenBothFrameworksLoaded() {
  $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {
    $.ajax({
          //Do something here
    })
});
}

我也在使用地理定位API。我应该将这些脚本留在
设备中吗?
var deviceReadyDeferred = $.Deferred();
var jqmReadyDeferred = $.Deferred();

document.addEventListener("deviceReady", deviceReady, false);

function deviceReady() {
  deviceReadyDeferred.resolve();
}

$(document).one("mobileinit", function () {
  jqmReadyDeferred.resolve();
});

$.when(deviceReadyDeferred, jqmReadyDeferred).then(doWhenBothFrameworksLoaded);

function doWhenBothFrameworksLoaded() {
  $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {
    $.ajax({
          //Do something here
    })
});
}