2012-07-01 5 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'', а также настроить ваш ajax-вызов на синхронный, используя параметр 'async: false' ... Однако я никогда не делал этого. – Pebbl

+0

ваше предложение было хорошим ... но функция не работает ... мне нужно положить ее внутри $ (document) .ready ... и т. Д.? – lollo

+0

Какая функция, на которую вы ссылаетесь, не работает? Если вы имеете в виду ваш «полный» обратный вызов, может случиться так, что браузер блокирует дальнейшие js от запуска сразу после завершения синхронного вызова ajax ... Вы вызываете хотя бы? Shut.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');