2010-11-13 2 views
0

Я пытаюсь создать форму согласия и ввести имя пользователя. Когда нажата кнопка отправки, я отправляю свой текстовый ввод в файл PHP, который отправляет мне свое имя (я понимаю, что есть более простые способы сделать это). Однако эта форма работает непоследовательно; иногда он записывает имя пользователя, а иногда и нет. На моем компьютере обычно всегда работает, поэтому у меня проблемы с устранением неполадки.Ввод текста перед подачей действия, действующего непоследовательно

вот код:

//submitlink is a dummy link 
$("#submitlink").click(function(event){ 
    event.preventDefault(); 
    var name1val = $("#name1").val(); 
    if (!(name1val == '')){ 
     $.post("mail.php", 
       { name : name1val, time : curr_time} 
     ); 
     //agree is a <form id="agree" action="nextpage.php"> 
     $("#agree").submit(); 
    else{ 
     //display error message 
    } 
} 

и mail.php является:

<?php 

$name = $_POST['name']; 
$text = $name . " has begun the survey at " . date("F j, Y, g:i a"); 
$result = mail('myemail', 'User has begun survey', $text); 
?> 

Можете ли вы назвать причины, почему этот код будет не в состоянии работать? Как я могу уверенно отправлять данные после того, как пользователь нажмет кнопку отправки?

+0

У вас отсутствуют закрывающие скобки и скобки для одного. Где 'if (name1val! == '')' закрывающая скобка? Как насчет '.click (function() {...})'? – Robert

+0

Извините - закрывающие скобки указаны в правильном коде. Я скопировал и вставил соответствующие части –

ответ

1

Вы отправляете вторую форму $("#agree").submit();, прежде чем подтвердить, что вызов AJAX преуспел. Иногда это будет работать; часто это не будет. Поместите submit вызов в обработчике успеха:

$.post("mail.php", 
    { name : name1val, time : curr_time}, 
    function(){ 
     $("#agree").submit(); 
    } 
); 

Это будет вызывать код после того, как запрос AJAX завершен.