2012-07-01 135 views
0

我正在開發一個網站(只用於娛樂和學習用jQuery編程) ,我想知道什麼是不對的:Ajax請求隱藏字段

$(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); 
}; 

..我看到了響應的警報,但得到值「未定義」。 ....可能是因爲輸入的類型是隱藏的..? 這是我的形式...也許我想念什麼?我真的很新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'參數將你的ajax調用設置爲syncronous ...然而我從來沒有嘗試過這樣的事情。 – Pebbl

+0

你的建議是好的...但功能不起作用...我必須把它放在$(document).ready ...等內。 – lollo

+0

你指的是哪個函數不起作用?如果你的意思是你的「完成」回調,那麼瀏覽器可能會阻止任何進一步的js在同步的ajax調用結束之後直接運行......你是否至少調用了「closing.php」?基本上你試圖做的事情總是會很棘手,特別是如果你依靠進行進一步處理,就像用戶想離開頁面一樣。設置Ajax調用syncronous也可能有點危險,因爲如果請求因任何原因掛起,瀏覽器也會掛起。 – 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');