Javascript jqueryajaxpost执行两次
我的AJAX调用总是执行两次。我使用的是普通的Javascript事件处理程序和Javascript jqueryajaxpost执行两次,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我的AJAX调用总是执行两次。我使用的是普通的Javascript事件处理程序和。我不太确定哪里出错了,服务器返回一个JSON数组,AJAX可以成功接收并解析该数组。我很确定这是我的AJAX,因为当我运行代码时,警报会弹出两次警报(“已运行”)。服务器不返回任何重定向头 HTML <form action="/" onsubmit="return false"> <b>Enter your announcement here</b> <s
。我不太确定哪里出错了,服务器返回一个JSON数组,AJAX可以成功接收并解析该数组。我很确定这是我的AJAX,因为当我运行代码时,警报会弹出两次<代码>警报(“已运行”)。服务器不返回任何重定向头
HTML
<form action="/" onsubmit="return false">
<b>Enter your announcement here</b>
<span class="dropdown"><img src="/index/img/p/help" style="width: 20px; height: 20px;"/>
<span class='dropdown-content'>
<b>tip:</b> try to make your announcement less than 100 words. Choose what you say wisely.
</span>
</span>
<textarea class='form-control' id='announcetxtbox' style='resize: vertical'></textarea>
<select id="announce-type">
<option value="general">General</option>
<option value="social">Social</option>
<option value="world">World</option>
<option value="maint">Site Maintenence</option>
</select>
<input type="button" id="announce-submit" class="btn btn-primary" value="Submit">
<script>
CKEDITOR.replace("announcetxtbox");
CKEDITOR.config.toolbar = [
{name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']},
];
</script>
</form>
在此处输入您的公告
小贴士:尽量让你的公告少于100字。明智地选择你说的话。
一般的
社会的
世界
场地维护
CKEDITOR.replace(“宣告txtbox”);
CKEDITOR.config.toolbar=[
{name:'basicstyles',项:['Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat'],
];
JAVASCRIPT
function _(str) {
return d.getElementById(str);
}
function get_announcement_data(ele) {
var type, answer = _("announce-msg");
switch (ele) {
case "general":
type = "G";
break;
case "social":
type = "S";
break;
case "world":
type = "W";
break;
case "maint":
type = "M";
break;
default:
type = "G";
break;
}
$.ajax({
url: "/profile_scripts/announcements.php?u=get",
type: "POST",
data: {type: type, CSRF_TOKEN: _("CSRF_TOKEN_VALUE").value},
success: function (data) {
data = JSON.parse(data);
answer.innerHTML = "";
for (var i = 0; i < data.length; i++) {
if (data[i].response == 1) {
answer.innerHTML += data[i].msg + "<small> Written By: " + data[i].author + " on " + data[i].date + "</small>"
} else {
answer.innerHTML = data[i].msg;
}
}
}
})
}
function add_announcement() { //THIS FUNCTION RUNS TWICE!
var announcement = CKEDITOR.instances.announcetxtbox.getData();
var type = _("announce-type").value;
var code;
switch (type) {
case "general":
code = "G";
break;
case "social":
code = "S";
break;
case "world":
code = "W";
break;
case "maint":
code = "M";
break;
default:
code = "G";
break;
}
$.ajax({
url: "/profile_scripts/announcements.php?u=post",
type: "POST",
data: {type: code, CSRF_TOKEN: _("CSRF_TOKEN_VALUE").value, msg: announcement},
success: function (data) {
data = JSON.parse(data);
if (data.response == 1) {
alert("ran");
get_announcement_data(type);
} else {
alert("Something went wrong!");
}
}
});
}
d.addEventListener("DOMContentLoaded", function () {
_("quick-actions-go").addEventListener("click", quick_action_search)
_("manual-data-pull").addEventListener("click", pull_data);
_("announce-submit").addEventListener("click", function (e) {
add_announcement(); <--- Event Listener
e.preventDefault();
e.stopPropagation();
});
var tab_elements = d.querySelectorAll("[id=ann-tab]");
for (var i = 0; i < tab_elements.length; i++) {
tab_elements[i].addEventListener("click", function (e) {
e.preventDefault();
get_announcement_data(this.dataset.modeval)
});
}
});
函数(str){
返回d.getElementById(str);
}
函数获取公告数据(ele){
var类型,答案=uuzm(“公告消息”);
开关(ele){
“一般”案:
type=“G”;
打破
“社会”一案:
type=“S”;
打破
案例“世界”:
type=“W”;
打破
案例“maint”:
type=“M”;
打破
违约:
type=“G”;
打破
}
$.ajax({
url:“/profile\u scripts/announcements.php?u=get”,
类型:“POST”,
数据:{type:type,CSRF\u标记:{(“CSRF\u标记值”).VALUE},
成功:功能(数据){
data=JSON.parse(数据);
answer.innerHTML=“”;
对于(变量i=0;i 在提交表单时添加_announcement();。ajax将调用这两个方法。您首先获取导致问题的方法和post方法这里您的表单将提交两次。您可以
1.当您呼叫fun add_公告时,传递“e”。Aad add line
e.preventDefault();
作为娱乐添加公告(e)的第一行
另外,从表单中取消绑定提交活动
$('form').unbind('submit').submit();
希望有帮助。但是submit()
函数会刷新页面。有什么方法可以解决这个问题吗?从表单标签中删除操作属性。尝试将其改为-$(“#宣布提交”)。单击(函数(e){add#u宣布();看起来像是annound submit
click处理程序从您的程序中触发了两次。您可以检查开发工具上的堆栈跟踪以查看其源代码。