2012-07-01 5 views
0

내가 사이트 개발 (단지 재미와 jQuery로 프로그래밍 알아보기) 을 그리고 난이 뭐가 잘못 됐는지 알고 싶습니다 해요 : 나는를 업데이트하기 위해 노력하고있어아약스 요청 숨겨진 필드

$(window).unload(function(){ 
var myid = $('input#v1').attr('value'); // hidden 
var playauth = $('input#v2').attr('value'); // hidden 
var srvid = $('input#v3').attr('value');  // hidden 
var result = 'myid='+ myid +'&auth='+ playauth +'&srvid='+ srvid; 
    $.ajax({ 
      type: "GET", 
      data: result, 
      url: "closing.php", 
      complete: function(data) { 
      alert(data.responseText); 
      } 
      }); 
}); 

데이터베이스 테이블. 창을 닫을 때 아무 일도 일어나지 않습니다. 이 기능의 이전 버전으로 :

window.onunload = function() { 
    var xhReq = new XMLHttpRequest(); 
    var n = document.getElementById("v1").InnerHTML; 
    var o = document.getElementById("v2").InnerHTML; 
    var p = document.getElementById("v3").InnerHTML; 
    xhReq.open("GET", ("closing.php?myid=" + n + "&auth=" + o + "&srvid=" + p) , false); 
    xhReq.send(null); 
    var serverResponse = xhReq.responseText; 
    alert(serverResponse); 
}; 

은 .. 내가 응답 경고를 보았지만 GET 값은 '정의되지 않은'했다. .... 아마 입력의 유형이 숨겨져 있기 때문에 ..? 이것은 내 양식입니다 ... 어쩌면 내가 뭔가를 놓치고 ?? 나는 jquery/ajax에 정말 새로운데 .. 제발 도와주세요 !!

<form method="get"> 
<input id="v1" type="hidden" name="val1" class="aget" value="<?php echo $_GET['myid']; ?>" /> 
<input id="v2" type="hidden" name="val2" class="bget" value="<?php echo $_GET['playauth']; ?>" /> 
<input id="v3" type="hidden" name="val3" class="cget" value="<?php echo $_SESSION['srvid']; ?>" /> 
</form> 

+2

경고의 한 단어로, 언로드 이벤트에서 ajax/xhttp을 호출하면 브라우저가 페이지를 닫으면 취소되기 전에 요청이 통과한다는 보장이 없습니다. ''onbeforeunload ''를 사용하고 async : false 매개 변수를 사용하여 동시성에 대한 아약스 호출을 설정하는 것이 가장 좋습니다 ... 나는 그런 일을 직접 시도하지 않았습니다. – Pebbl

+0

당신의 제안은 좋았습니다 ...하지만 함수가 작동하지 않습니다 ... 나는 그것을 $ (document) .ready ... 등등 안에 넣어야합니까? – lollo

+0

어떤 기능을 추천하지 않습니까? 만약 당신이'complete' 콜백을 의미한다면, 동기식 아약스 호출이 끝난 직후 브라우저가 더 이상 js를 실행하지 못하게 될 것입니다 ... 적어도 closing.php를 호출 했습니까? 기본적으로 사용자가하려고하는 작업은 항상 까다로운 작업입니다. 특히 사용자가 페이지를 떠나기를 원할 때 추가 처리 작업을 수행 할 때 더욱 그렇습니다. AJAX 호출을 동기식으로 설정하는 것은 약간의 위험이 따릅니다. 이유가 무엇이든지 요청이 중단되면 브라우저도 마찬가지입니다. – Pebbl

답변

2

변화

var myid = $('input#v1').attr('value'); // hidden 
var playauth = $('input#v2').attr('value'); // hidden 
var srvid = $('input#v3').attr('value');  // hidden 

var myid = $('input#v1').val(); // hidden 
var playauth = $('input#v2').val(); // hidden 
var srvid = $('input#v3').val();  // hidden 
+0

아무것도 아니야, 나는 같은 결과를 가지고있다. :( – lollo

2

에 당신은

.val(); 대신 .attr('value');

01 사용해야합니다