在javascript中加载jQuery/ajax
我在表单中使用ajax,因为我不希望页面在提交后重新加载。 现在一切都正常了,但唯一的问题是每次单击submit按钮时ajax脚本都会运行 我想我可以在if语句中粘贴ajax,告诉它何时运行,何时不运行,但它不起作用。。有人知道为什么吗在javascript中加载jQuery/ajax,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我在表单中使用ajax,因为我不希望页面在提交后重新加载。 现在一切都正常了,但唯一的问题是每次单击submit按钮时ajax脚本都会运行 我想我可以在if语句中粘贴ajax,告诉它何时运行,何时不运行,但它不起作用。。有人知道为什么吗 theForm.onsubmit = function() { if (pion == 1 || myName.value.length == 0 || myMessage.value.length == 0) { if (pion == 1 || em
theForm.onsubmit = function() {
if (pion == 1 || myName.value.length == 0 || myMessage.value.length == 0) {
if (pion == 1 || emailValid.value.length == 0) {
emailValid.style.border = "1px solid red";
myError.innerHTML = "U heeft geen geldig e-mail adres ingevoerd.";
}
if (myName.value.length == 0) {
myName.style.border = "1px solid red";
myError.innerHTML = "U heeft geen naam ingevuld.";
}
if (myMessage.value.length == 0) {
myMessage.style.border = "1px solid red";
myError.innerHTML = "U heeft geen bericht ingevuld.";
}
return false;
}
else {
// the ajax I found somewhere, that works but not in this if/else statement
$(function () {
$('form').bind('submit', function () {
$.ajax({
type: 'post',
url: 'mail.php',
data: $('form').serialize(),
success: function () {
alert('form was submitted');
}
});
return false;
});
});
return true;
}
}此代码块:
$('form').bind('submit', function () {
$.ajax({
type: 'post',
url: 'mail.php',
data: $('form').serialize(),
success: function () {
alert('form was submitted');
}
});
return false;
});
绑定将AJAX请求发送到表单
元素的提交
事件的函数。一旦它这样做了,函数将永远保持绑定状态(或者至少在您明确定义它之前)。这就是为什么当您的代码第一次出现在else
语句中时,每次提交表单时都会发送AJAX请求
这就是说,您的if
/else
逻辑应该在绑定到表单的
提交事件的函数中,以便有条件地发送AJAX请求。比如:
$('form').bind('submit', function () {
if (etc etc etc) {
// do other things
}
else {
// send AJAX
$.ajax({
type: 'post',
url: 'mail.php',
data: $('form').serialize(),
success: function () {
alert('form was submitted');
}
}
});
return false;
});
//我在某处找到的阿贾克斯
将代码复制/粘贴到项目中而不知道该代码的作用是一个众所周知的坏主意
此代码不进行AJAX调用:
$(function () {
// anything in here
});
这段代码的作用是告诉jQuery在文档准备就绪时执行该函数。但当您调用它时,文档可能已经准备好了,因为它发生在表单提交事件上
最多,取决于jQuery内部的工作方式,它可能会立即执行该内部函数。但是,您仍然不需要对jQuery进行包装调用
那么,这个函数在做什么呢
$('form').bind('submit', function () {
// anything in here
});
同样,它实际上并没有执行任何AJAX代码。所有这些操作都是将函数绑定到表单的提交事件。该函数可能包含AJAX代码(在本例中确实包含),但此处不执行该代码。它将在下次提交表单时执行
但是,您每次提交表单时都会这样做。所以现在发生的是:
- 用户按下submit,没有明显的变化。1个事件处理程序绑定到下一个提交事件
- 用户按下submit,执行1个事件处理程序(AJAX),2个事件处理程序现在绑定到下一个submit事件
- 用户按下submit,执行2个事件处理程序(AJAX),4个事件处理程序现在绑定到下一个submit事件
- 等等
如果要在
else
块中调用AJAX代码,则只需在else
块中调用它:
if (/* ... */) {
// ...
} else {
$.ajax({
type: 'post',
url: 'mail.php',
data: $('form').serialize(),
success: function () {
alert('form was submitted');
}
});
}
还有一个问题。。如果我在else语句中添加其他代码行,它将不再工作。。知道为什么吗?因此,我还想在“else”中添加这行代码:
myMessage.value=“”代码>@user3124133:定义“它不工作”。显示您正在使用的实际代码并描述错误。else{myMessage.value=”“;$.ajax({type:'post',url:'mail.php',data:$('form').serialize(),success:function(){});返回false;}
这就是ELS中的全部代码ajax部分不再工作,因为如果我添加myMessage部分,提交后我不会收到邮件。@user3124133:“因为我没有收到邮件”并不是一个真正有意义的调试过程。使用浏览器的调试工具。JavaScript控制台中是否存在任何错误?在调试器中单步执行代码时,它是否会执行?是否向服务器发出AJAX请求?服务器的响应是什么?您需要调试代码,不要将其视为黑盒。