2012-08-06 2 views
0

jQuery Mobile에서로드 할 때 페이지에서 스크립트를 실행하려고합니다. 특정 기준이 충족되지 않으면 다른 페이지로 리디렉션됩니다. 예 : PageA -> PageB -> 페이지로드 로직 수행 -> PageC로 리디렉션 링크를 클릭하십시오. 처음으로 PageB를 탐색하면 모두 잘 작동합니다. 그런 다음 PageA로 돌아가서 PageB에 대한 탐색을 반복하면 리디렉션이 발생하지 않습니다 (pageload 논리가 실행되지 않음). PageA를 새로 고침하고 다시 시도하면 리디렉션이 발생합니다.처음으로 실행 된 jQuery 모바일 pageload 코드

어떤 종류의 캐싱 문제가있는 것 같습니까? 아니면 다른 유형의 페이지로드 이벤트를 사용해야합니까? 페이지가 적중 될 때마다 페이지로드 논리가 실행되도록하려면 어떻게해야합니까?

다음은 코드의 단순화 된 버전입니다. 이 스크립트는 jqm 및 jqm 모바일 스크립트 뒤에 헤드에서 호출됩니다.

$(document).bind('pageload', function (evt,data) { 

    // I need the url to see if the page needs the logic executed on it 
    var page = $.mobile.path.parseUrl(""+ data.url +""); 
    if (page == "PageB"){ 
     logicRequired = "yes";  
    } 
    switch (logicRequired) 
    { 
    //========================== 
    case 'yes': 

     // AJAX call to determine if redirect is needed 
     $.ajax({ 
     url: "scripts/file.php", 
     async: false, 
     cache: false, 
     success: function (data){ 
      if(data.status == 'success') { 
       // do some stuff 


      } else if(data.status == 'error') { 
       //redirect to another page 
       window.location.replace('redirectPage.html'); 
      } 
     }, 
     error: function(data){ 
      //alert("There was an error in the ajax call"); 
     }, 
     }); 
     break; 
     } 
}); 

답변

2

pageload 번만 외부 가상 페이지가 DOM하게된다마다 발사. 따라서 해당 페이지로 다시 이동하면 이벤트가 다시 발생하지 않습니다. 그러나 의사 페이지를 처음 방문했을 때 발생하는 후속 페이지 방문뿐만 아니라 의사 페이지 방문시 발생하는 pagebeforeshow 이벤트를 사용할 수 있습니다.

data-cache="false" 속성을 사용하여 특정 의사 페이지에 플래그를 지정할 수 있으므로 jQuery Mobile은 사용자가 의사 페이지에서 다른 페이지로 이동 한 후에 의사 페이지를 삭제합니다.

+0

pagebeforeshow 이벤트가 작동하지 않는 것처럼 보입니다. - $ (document) .bind ('pagebeforeshow', function() {.... 등) – byoung

+0

@byoung 문제의 데모를 설정할 수 있습니까? – Jasper

+0

내가 잘못 생각한 것 같습니다 ... pagebefore 이벤트가 잘 작동합니다. 감사합니다 !! – byoung