微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery-plugins – jquery表单插件,没有错误处理

看来Jquery.Form插件中没有错误处理工具,这是非常令人沮丧的。尽管文档说明我们可以使用$ .ajax选项,但是当服务器返回错误时,我仍然无法使用’error’选项,特别是500和400系列。是不是这个插件无法处理从服务器的任何错误或是一个错误等?
有人可以告诉我如何处理这个插件错误(400,500等)?我需要你的帮助…所有我想要的是一个简单的错误处理…谢谢。
$("#uploadingImg").hide();

var options = {//Define ajax options
    type: "post",target: "#responsePanel",beforeSend: function(){
        $("#uploadingImg").show();
    },complete: function(xhr,textStatus){
        $("#uploadingImg").hide();
    },success: function(response,statusstring,xhr,$form){
        // I kNow what to do here since this option works fine
    },error: function(response,status,err){
        // This option doesn't catch any of the error below,// everything is always 'OK' a.k.a 200
        if(response.status == 400){
            console.log("Sorry,this is bad request!");
        }
        if(response.status == 601){
            sessionTimedOut();
        }
    }
}
$("#polygonUploadForm").submit(function(){
    $(this).ajaxSubmit(options); // Using the jquery.form plugin
    return false;
});

解决方法

jQuery表单插件确实处理错误documentation是正确的,表示它可以使用$ .ajax选项。但是插件可以运行两种模式 – 正常和文件上传。您遇到的问题是因为您正在执行文件上传。 (你不说这个,但你有“#uploadingImg”和“#polygonUploadForm”,并且递归推理,你有这个问题。)

这通常被声明,但是您无法使用AJAX上传文件。此解决方法是使用iframe。表单提交POST一个正常的HTTP请求,并在iframe中加载服务器响应。插件获取响应并瞧瞧。因为这是正常的HTTP请求,所以$ .ajax的规则和行为不适用(因为它没有被使用)。 Form插件可以做的唯一一件事就是把它取得成功。在代码方面,文件上传将永远不会触发分配给ajaxForm()或ajaxSubmit()的“error”属性。如果你真的想证明这不是一个AJAX请求,请附加一个ajaxComplete()处理程序到窗体(即完全独立于Form插件方法)。它也不会被触发。或者看看Firebug的Net-> XHR面板。

这就是说 – 上传不是一个AJAX请求。你可以做的最好的工作是在ajaxForm()/ ajaxSubmit()的’成功’或’完整’回调中工作。您无限制地访问实际的HTTP响应代码,但您可以检查响应。如果响应是空的或不是您期望的,您可以通过调用xhr.abort()实际触发“错误”回调。调用abort()和触发“错误”,而不是做“if(good response){yay!} else {哦,不!}”,使代码更清晰,更易于理解。这是一个代码示例:

$("#uploadForm").ajaxForm({
    success: function(response,textStatus,form) {
        console.log("in ajaxForm success");

        if (!response.length || response != 'good') {
            console.log("bad or empty response");
            return xhr.abort();
        }
        console.log("All good. Do stuff");
    },error: function(xhr,errorThrown) {
        console.log("in ajaxForm error");
    },textStatus) {
        console.log("in ajaxForm complete");
    }
});

控制台日志中会打印出错误的响应:

[jquery.form] state = uninitialized
"NetworkError: 404 NOT FOUND - http://server/fileupload/"
[jquery.form] state = loading
[jquery.form] isXml=false
in ajaxForm success
bad or empty response
[jquery.form] aborting upload... aborted
in ajaxForm error
in ajaxForm complete
in ajaxForm complete

我不知道为什么“完整”回调运行两次 – 任何人?
一个最后的事情,读this thread,如果你问为什么jQuery或Form插件不能只读取iframe的HTTP标头。

原文地址:https://www.jb51.cc/jquery/181795.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐