2013-07-25 2 views
2

Я просматривал свой код снова и снова, но я не могу найти проблему. Когда я нажимаю ссылку #add-user-btn, файл actions.php вызывается дважды (и, следовательно, скрипт PHP выполняется дважды).jQuery/Ajax запрос отправляется дважды

Вот сценарий: Я полагаю, что это как-то связано с javascript перед запросом ajax?

$(function() { 
    $("#add-user-btn").click(function (e) { 
     e.preventDefault(); 
     var email = $("#email").val(); 
     var name = $("#name").val(); 
     var action = "adduser"; 

     $.ajax({ 
      url: '../actions.php', 
      type: 'POST', 
      data: { 
       action: action, 
       email: email, 
       name: name, 
      }, 
      dataType: 'json', 
      success: function (data) { 
       $(".close-reveal-modal").click(); 
      } 
     }); 
    }); 
}); 

HTML-:

<div id="adduser" class="reveal-modal"> 
<h1>Add new user</h1> 
<p><label for="email">E-mail:</label> <input id="email" name="email" type="text" placeholder="[email protected]" /></p> 
<p><label for="name">Name:</label> <input id="name" name="name" type="text" placeholder="Adam Smith"/></p> 
<p><label for="password">Password:</label> <input id="password" name="password" type="password" placeholder="123456" /></p> 
<p> 
<label for="authorization">Authorization:</label> 
<select id="authorization" name="authorization"> 
    <option value="0">Administrator</option> 
    <option value="1">Superuser</option> 
    <option value="2">User</option> 
</select>  
</p> 
<button id="add-user-btn">Submit</button> 
<a class="close-reveal-modal">&#215;</a> 
</div> 
+1

у вас есть несколько элементов с идентификатором 'надстройка пользовательского btn', также, является' $ (». близким выявить -modal "). click();' эта строка повторно запускает запрос? – tymeJV

+0

Вы уверены, что вы не дважды щелкаете :) – marteljn

+1

Является ли кнопка внутри формы? Перезагружается ли страница? Как вы знаете, что он дважды вызывает файл PHP? – adeneo

ответ

14

Попробуйте

$("#add-user-btn").unbind('click').bind('click', function() { }); 

Это обеспечит событие щелчка только будет вызываться один раз.

+4

Несмотря на это, было бы неплохо узнать, почему код OP стреляет дважды. – tymeJV

+2

Мы все время угадываем время от времени, но в этом вопросе нет абсолютно ничего, чтобы предположить, что это правильный ответ, даже если этот подход часто решает проблемы, которые должны были быть решены в другом месте. – adeneo

+0

Это может решить проблему, вызванную некоторой другой ошибкой (но не решает проблему). И tymeJV, и adeneo верны. Я немного поспешил ответить. – JeffRegan

1

Когда я работал с определенным сайтом, на котором у меня был только доступ к моему javascript, я тоже получил такую ​​ошибку. Проблема заключалась в том, что там было много $ (функция() и $ (документ) .ready в других кодах

, что вы можете сделать, чтобы предотвратить это, если вы не можете устранить эту проблему Сердечник:.

var preventRunDefault; 
$(function() { 
    if(!preventRunDefault) { 
    preventRunDefault = true; 
    $("#add-user-btn").click(function (e) { 
     e.preventDefault(); 
     var email = $("#email").val(); 
     var name = $("#name").val(); 
     var action = "adduser"; 

     $.ajax({ 
      url: '../actions.php', 
      type: 'POST', 
      data: { 
       action: action, 
       email: email, 
       name: name, 
      }, 
      dataType: 'json', 
      success: function (data) { 
       $(".close-reveal-modal").click(); 
      } 
     }); 
    }); 
    } 
}); 

Но правильный путь искать причину и не делать обходные пути.

Смежные вопросы