AJAX调用适用于Chrome和Safari,但不适用于Firefox和IE?

这是我的代码,用于重置用户的密码,以防用户忘记密码。 数据通过AJAX请求发送到PHP代码,PHP代码根据输入的有效性简单地回显“Y”或“N”。

问题是,AJAX调用在Firefox 19和IE 9中不起作用。我没有在其他版本的IE中尝试过。 AJAX调用在chrome和safari中完美运行。 有没有人遇到同样的问题? 有人可以帮忙吗?

 Forgot Password?     label.error { color: red; } #status { color: green; }   $(document).ready(function(){ $('#code_form').hide(); $('#password_form').hide(); $("#email_form").validate({ onkeyup: false, rules: { email: { required: true, email: true } }, messages: { email: { required: "Please enter your email ID.", email: "Please enter a valid email ID." } } }); $('#email_send').click(function() { event.preventDefault(); var email = $('#email').val(); $.ajax({ type: "POST", url: "reset_code.php", data: {email: email}, cache: false, success: function(response){ if(response == "Y") { $('#code_form').show(); $('#email_send').hide(); $('#status').html("Check your mail for the reset code."); } else { $('#status').html("Looks like you have entered a wrong email ID."); } } }); }); $("#code_form").validate({ onkeyup: false, rules: { code: { required: true, digits: true } }, messages: { code: { required: "Please enter the code received in your mail.", digits: "Please enter the code received in your mail." } } }); $('#code_send').click(function() { event.preventDefault(); var email = $('#email').val(); var code = $('#code').val(); $.ajax({ type: "POST", url: "code_verify.php", data: {email: email, code: code}, cache: false, success: function(response){ if(response == "Y") { $('#password_form').show(); $('#code_send').hide(); $('#status').html("Ok, now enter your password twice before you forget again."); } else { $('#status').html("Please enter the code received in your mail."); } } }); }); $("#password_form").validate({ onkeyup: false, rules: { password: { required: true, minlength: 8 }, repassword: { required: true, equalTo: "#password" } } }); $('#password_send').click(function() { event.preventDefault(); var email = $('#email').val(); var password = $('#password').val(); var repassword = $('#repassword').val(); $.ajax({ type: "POST", url: "update_password.php", data: {email: email, password: password, repassword: repassword}, cache: false, success: function(response){ if(response == "Y") { $('#email_form').hide(); $('#code_form').hide(); $('#password_form').hide(); $('#status').html("Password reset successful. Proceed to login page. "); } else { $('#status').html("Oops. Something went wrong. Try again."); } } }); }); });    

Reset your password

Enter the code received in your Email

Password should be 8 characters or more. Choose a strong password which is a combination of Capital and Small case alphabets, Symbols and Numbers.

您必须为事件处理程序的参数使用事件对象,chrome和safari在触发事件但firefox没有时会有一个名为event的全局事件对象。 所以event.preventDefault(); 会导致错误。

例如

 $('#email_send').click(function(event) { 

如前所述,您没有在click处理程序中正确实现preventDefault() 。 但是,即使您修复了preventDefault()问题,它仍可能无法正常工作。 请参阅: http : //jsfiddle.net/ZEFzx/ ,其中click处理程序中的代码根本不会被触发。

幸运的是,您不需要担心click处理程序,因为jQuery Validate插件已经内置了提交事件处理程序回调函数,这正是您应该放置ajax的地方。

根据Validate插件的文档 , submitHandler回调函数是:

“当表单有效时,回调处理实际提交。获取表单作为唯一参数。替换默认提交。在validation后通过Ajax提交表单的正确位置 。”

请尝试使用此代码:

 $(document).ready(function () { $("#email_form").validate({ onkeyup: false, rules: { email: { required: true, email: true } }, messages: { email: { required: "Please enter your email ID.", email: "Please enter a valid email ID." } }, submitHandler: function (form) { var email = $('#email').val(); // var data = $(form).serialize(); // capture all the form data at once $.ajax({ type: "POST", url: "reset_code.php", data: { email: email }, cache: false, success: function (response) { if (response == "Y") { $('#code_form').show(); $('#email_send').hide(); $('#status').html("Check your mail for the reset code."); } else { $('#status').html("Looks like you have entered a wrong email ID."); } } }); return false; // blocks redirect after submission via ajax } }); }); 

演示: http : //jsfiddle.net/xMg8e/