1

我正在使用 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>

谁能指出问题出在哪里。提前致谢。

4

3 回答 3

4
$(this).ajaxSubmit({
            target: '#output',
            success:  afterSuccess,
            error:error
        });

function error(response,status,xhr){
alert("error");}

将像我在我的项目中实现相同的概念一样工作,并且工作正常。

于 2014-02-25T15:32:28.920 回答
1

如果发生错误,您是否更改了服务器响应的 http 状态代码?
对于 jQuery,success= 2xx 在响应中返回 http 状态码error= 4xx
如果您没有更改响应的标头,对于您的 jQuery 代码,它总是成功的!!!


所以2个解决方案:

  1. 如果出现错误,您可以更改 http 标头代码状态。
  2. 您可以返回不同的内容作为响应并在您的success函数中检查它。

其他一点:像后面一样改变success属性的定义。

success:  function () { afterSuccess(); } //call function after success

为什么 ?因为,如果你直接声明函数,它将在 ajaxSubmit() 配置期间执行,也许它解决了你的问题,因为在服务器响应之前,它afterSuccess()会被调用。

于 2013-06-17T08:09:34.293 回答
-2

如果 HTTP 响应代码在 200-299 范围内(或 === 304),则该success事件将始终触发,否则不会触发。所以我猜你的服务器端代码200 OK即使出现问题也会响应。

如果服务器输出一个值,例如true您可以测试响应文本:

    $(this).ajaxSubmit({
        target: '#output',
        success:  function(response) {
            if(response == "true") {
                afterSuccess();
            }
        }
    });
于 2013-06-17T08:13:31.460 回答