2012-01-03 4 views
1

window.onbeforeunload 함수에서 AJAX를 사용하여 내 사이트의 페이지에있는 텍스트 필드를 자동 저장하려고합니다 (저장 버튼이 없으며 모두 백그라운드에서 수행됩니다).). 저장 기능은 PHP로 작성되었습니다. 나는 노력에 의해 시작 다음onbeforeunload에서 Ajax를 사용하여 필드 데이터를 자동 저장

window.onbeforeunload = function(e){ 
    var noteelement = document.getElementById('note'); 
    var mynote = noteelement.value; 

    $.post('save_my_note.php', { thenote: mynote }, function(data){}); 
    }; 

연구에서, 나는 창이으로부터 함수 화재 전에 닫기 때문에 인해 아약스 호출의 비동기 특성으로, PHP 코드가 호출되지 않는다는 것을 이해하게되었습니다 섬기는 사람.

물론, 다른 사람들이 말했듯이, 대화 상자가 팝업되도록하는 반환 값을 onbeforeunload 함수에 추가하면 (즉, "계속 하시겠습니까?"상자가 나타남), 이후 작업을 수행합니다.

$.post('save_my_note.php', { thenote: mynote }, function(data){}); 
    return mynote; 
    }; 

내가 함수에 기능을 기다립니다 있도록 비동기 AJAX에이 게시물에 호출을 변경해야했다되었습니다 대화 상자가 응답을 기다리는 동안 .post 호출은 실행 얻을 수있는 시간이 완전하지만 문법에 정통하지는 않습니다. 필자가 필요한 구문을 잘 모르겠습니다. 나는 포스트 기능 대신에 다음을 시도했다 :

 $.ajax({ 
      url: "save_my_note.php", 
      data: "{thenote: mynote}", 
      async: false     
     }); 

그러나, 그 중 하나가 작동하지 않는 것 같습니다.

누구나 onbeforeunload (또는 onunload ??) 함수를 통해 자동 저장을 동기식으로 구현하는 간단한 코드 예제가 있습니까? 나는 자바 스크립트 또는 jquery 전문가가 아니며 온라인에서 찾은 예제가 혼란 스럽다.

+0

마지막 코드 조각에'async : false'를 입력하셨습니까? – Ivan

+1

답변에 대한이 질문을 참조하십시오 : http://stackoverflow.com/questions/2970782/javascript-wait-until-ajax-request-finishes-to-close-page – Ivan

+0

모바일 브라우저에서 onbeforeunload가 실행되지 않는다는 점에 유의하십시오. 그래서 당신은 모바일 시장을 먹는다면 다르게 처리해야 할 수도 있습니다. –

답변

0

어쩌면 당신은 시간 제한 일시 정지를 강제 할 수 -이 실제로 작동 있을지 몰라, 그냥 추측 :

var bSaved = false; 
window.onbeforeunload = function(e){ 
    bSaved = false; 
    var noteelement = document.getElementById('note'); 
    var mynote = noteelement.value; 

    $.post('save_my_note.php', { thenote: mynote }, function(data){ bSaved = true; }); 

    window.setTimeout('bSaved = true',2000); 

    while (!bSaved) {} 

    }; 
+0

나는 그것을 ajax로 바꾸고 async를 사용하는 것을 읽었습니다 : true는 서버 사이드 코드가 멈추고 이전에 완료 될 때까지 기다려야합니다. 계속 나아가지만, 나는 그것을 작동시키지 못합니다. 제한 시간은 기껏해야 무의미 할 수 있으며 닫을 때까지 내 모든 페이지에 필수 대기 시간을 추가합니다. –

+0

그건 필수 시간이 아니에요, 오히려 최대 시간 초과입니다. 서버가 반환 되 자마자 페이지가 언로드되거나 2 초 후에 어느 쪽이든 먼저 오는 페이지가 언로드됩니다. –

+1

@MattH 타임 아웃 (및 성공 콜백)은 while 루프 내부에서 영원히 멈추어 있기 때문에 결코 해고되지 않습니다. – Paul