我正在使用jquery.form.js和ajax来提交表单。我遇到的问题是,即使它没有成功(当出现错误时),ajax也会重置表单,无论它是在代码中,只是在成功后才能执行。
以下是代码:
<script>
$(document).ready(function()
{
$('#FileUploader').on('submit', function(e)
{
e.preventDefault();
$('#submit').attr('disabled', ''); // disable upload button
//show uploading message
$("#loadding").html('<div class="loader"><img src="images/ajax-loader.gif" alt="Please Wait"/> <br/><span>Submiting...</span></div>');
$(this).ajaxSubmit({
target: '#output',
success: afterSuccess //call function after success
});
});
});
function afterSuccess()
{
$('#FileUploader').resetForm(); // reset form
$('#submit').removeAttr('disabled'); //enable submit button
$('#loadding').html('');
}
</script>
有人可以指出问题出在哪里。提前谢谢。
答案 0 :(得分:4)
$(this).ajaxSubmit({
target: '#output',
success: afterSuccess,
error:error
});
function error(response,status,xhr){
alert("error");}
将起作用,因为我在我的项目中实现了相同的概念,并且工作正常。
答案 1 :(得分:1)
如果发生错误,您是否更改了服务器响应的http状态代码?
对于jQuery,success
= 2xx http状态代码在响应中返回,error
= 4xx
如果你没有改变响应的标题,对于你的jQuery代码,它总是成功的!
所以2个解决方案:
success
函数中进行检查。其他方面:改变成功属性的定义,如后面。
success: function () { afterSuccess(); } //call function after success
为什么?因为,如果直接声明该函数,它将在ajaxSubmit()配置期间执行,也许它可以解决您的问题,因为在服务器的响应之前,将调用afterSuccess()
。
答案 2 :(得分:-1)
如果HTTP响应代码在200-299范围内(或=== 304),则success
事件将始终触发,其他任何内容都不会触发。所以我猜你的服务器端代码即使在出现问题时也会以200 OK
响应。
如果服务器输出true
之类的值,您可以测试该响应文本:
$(this).ajaxSubmit({
target: '#output',
success: function(response) {
if(response == "true") {
afterSuccess();
}
}
});