Php jQuery/Ajax请求被发送了两次
我一次又一次地扫描我的代码,但似乎找不到问题。 当我单击链接Php jQuery/Ajax请求被发送了两次,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我一次又一次地扫描我的代码,但似乎找不到问题。 当我单击链接#add user btn时,文件actions.php被调用两次(因此php脚本被执行两次) 下面是脚本:我想它与ajax请求前面的javascript有关 $(function () { $("#add-user-btn").click(function (e) { e.preventDefault(); var email = $("#email").val(); var n
#add user btn
时,文件actions.php
被调用两次(因此php脚本被执行两次)
下面是脚本:我想它与ajax请求前面的javascript有关
$(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="name@example.com" /></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">×</a>
</div>
添加新用户
电邮:
姓名:
密码:
授权:
管理员
超级用户
使用者
提交
×
试试看
这将确保单击事件只被调用一次。当我使用一个我只能访问javascript的特定网站时,我也遇到了这种错误。问题是在其他代码中有很多$(function()和$(document).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();
}
});
});
}
});
但是正确的方法是搜索原因,不要做解决办法。当您在HTML文件中包含多次相同的JavaScript文件时,也会出现此问题
<html>
<head>
<script src="utility.js"></script>
<script src="utility.js"></script>
</head>
您是否有多个ID为添加用户btn
的元素,以及$(“.close reveal modal”)。单击();
此行将重新触发请求?您确定没有双击:)按钮是否在表单中?页面是否重新加载?你怎么知道它两次调用PHP文件?你试过注释掉$(“.close-reveal-modal”)。单击()代码>?我想知道这是否有影响。我知道,因为我在浏览器控制台中检查了XHR请求。我的文档中只有一个添加用户btn。然而,存在多个接近揭示模态元素。我将对此进行修补。按钮不在表单中(它只是一个链接),页面也不会重新加载。我们都会时不时地猜测一些,但问题中绝对没有任何东西表明这是正确的答案,即使这种方法通常能解决本应在其他地方解决的问题,但也能解决由其他错误引起的问题(但不能解决错误)。季梅杰夫和阿德内奥都是正确的。我回答得有点匆忙,这就解决了问题!非常感谢!我仍然不知道出了什么问题。就像所有其他人所暗示的那样,你应该设法找出根本问题。是否每次提交两次?您是否使用ajax加载元素?上述工作原理意味着您没有两个具有相同id的元素,并且表单问题不会导致您的问题。这取决于浏览器实现,但确实可能发生:
<html>
<head>
<script src="utility.js"></script>
<script src="utility.js"></script>
</head>