我正在构建一个非常简单的页面,它是一个待办事项列表。它通过新的待办事项表单接受用户的输入,将待办事项发布到服务器,然后接收(几乎)相同的数据并将其添加到列表中。但是,每次应该将数据发送到服务器时,都会调用 $.ajax 函数两次。
我的js:
// todo.js
function onload() {
$( "#datepicker" ).datepicker();
$( "#todoform" ).submit(function(e){
e.preventDefault();
sendtodo();
return false;
});
}
function sendtodo() {
$.ajax({
url: '/blog/todo/newtodo/',
type: "POST",
success: function(data) {
receivetodo(data);
},
data: ({
body: $('#newbodytextarea').val(),
title: $('#titleinput').val(),
dateDue: $('#datepicker').val(),
time: $('#timepicker').val(),
category: $('#newcategory').val()}),
});
}
function receivetodo(data) {
$('#todobody').append(data);
}
和我的 HTML 的一部分:
<html>
<head>
<title>Todo list</title>
<link href="/django_media/css/todo/todo.style.css" rel="stylesheet" type="text/css">
<link href="/django_media/css/jquery-ui-1.8.5.custom.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="/django_media/js/jquery.js"></script>
<script type="text/javascript" src="/django_media/js/jquery-ui-custom.js"></script>
<script type="text/javascript" src="/django_media/js/todo/todo.js"></script>
<script type="text/javascript">
$(document).ready(function(){
onload();
});
</script>
</head>
<body>
[.................]
</body>
</html>
万一重要,我使用 Django 作为我的后端。返回的数据是一个
<div>
包含几个其他 <div>
标签和一些 <h1>
和 <p>
标签。将接收到的 HTML 附加到页面的代码部分工作正常,只是它附加了两次(并且数据确实在数据库中两次)。我试过使用
$("#todoform").click(function(e){
而不是 $("#todoform").submit(function(e){
但这并没有改变任何东西。我还确保 onload()
只被调用一次。为什么 sendtodo()
执行两次?如果您需要任何其他代码,我也可以发布。
最佳答案
替换这个:
$( "#todoform" ).submit(function(e)
有了这个:
$( "#todoform" ).unbind('submit').submit(function(e)
关于使用相同数据调用两次 JQuery Ajax 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3775368/