我正在開發一個網站(只用於娛樂和學習用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>
警告一句話,當在卸載事件中關閉ajax/xhttp調用時,並不能保證在瀏覽器關閉頁面之前請求會被取消。最好使用'onbeforeunload''並且使用'async:false'參數將你的ajax調用設置爲syncronous ...然而我從來沒有嘗試過這樣的事情。 – Pebbl
你的建議是好的...但功能不起作用...我必須把它放在$(document).ready ...等內。 – lollo
你指的是哪個函數不起作用?如果你的意思是你的「完成」回調,那麼瀏覽器可能會阻止任何進一步的js在同步的ajax調用結束之後直接運行......你是否至少調用了「closing.php」?基本上你試圖做的事情總是會很棘手,特別是如果你依靠進行進一步處理,就像用戶想離開頁面一樣。設置Ajax調用syncronous也可能有點危險,因爲如果請求因任何原因掛起,瀏覽器也會掛起。 – Pebbl