Jquery 文件上载失败,但jqXHR在IE8中返回状态200

Jquery 文件上载失败,但jqXHR在IE8中返回状态200,jquery,asp.net,json,web-services,jquery-file-upload,Jquery,Asp.net,Json,Web Services,Jquery File Upload,我正在使用插件调用web服务并将图像上载到服务器 图像上传很好,我向web服务添加了一些验证,如果图像大于4MB,就会抛出异常 以下是我如何使用文件上传插件: var fileUploadInput = $('#uploader').fileupload({ dataType: 'json', add: function (e, data) { mainObject._addFile(e, data, mainObject); }, done:

我正在使用插件调用web服务并将图像上载到服务器

图像上传很好,我向web服务添加了一些验证,如果图像大于4MB,就会抛出异常

以下是我如何使用文件上传插件:

var fileUploadInput = $('#uploader').fileupload({

    dataType: 'json',
    add: function (e, data) {
        mainObject._addFile(e, data, mainObject);
    },
    done: function (e, data) {
        mainObject._fileUploadDone(e, data, mainObject);
    },
    fail: function (e, data) {
        mainObject._fileUploadFail(e, data, mainObject)
    }
});
现在,当文件上传失败时,参数
data
包含一个
jqXHR
对象,如下所示:

readyState: 4
status: 200
statusText: "success"
在Chrome中,jqXHR包含由web服务引发的异常生成的可爱的错误消息。在Fiddler中,我可以看到响应是400错误响应,并且可以在响应体中看到错误消息

有人知道为什么IE8没有提到这一点吗

更新

服务器端代码的简化版本:

[OperationContract(), WebInvoke(UriTemplate = "/Images", Method = "POST")]
    public System.Guid CreateImage(System.IO.Stream Image)
    {

        //IE8 needs response to be in plain text format, or it will attempt to download the response :(
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Type", "text/plain");

        //perform validation
        BLL.Errors validationErrors = BLL.Utilities.ImageFileProcessing.ValidateSizeAndFormat(multipartRequestParser.FileContents);

        //if there were errors
        if (validationErrors.Count > 0)
        {
            //send back the errors
            throw new WebFaultException<BLL.Errors>(validationErrors, System.Net.HttpStatusCode.BadRequest);
        }

        //save the image (returns the identifier for the image)
        System.Guid imageId = BLL.Custom.BeamUSBuyingWindow.DataTransferObjects.Brand.SaveImage(multipartRequestParser.FileContents);

        //set the response status and URI for created resource
        WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(new System.Uri(WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri + "/" + imageId.ToString()));

        return imageId;

    }
[OperationContract(),WebInvoke(UriTemplate=“/Images”,Method=“POST”)]
public System.Guid创建映像(System.IO.Stream映像)
{
//IE8需要以纯文本格式响应,否则将尝试下载响应:(
WebOperationContext.Current.OutgoingResponse.Headers.Add(“内容类型”、“文本/普通”);
//执行验证
BLL.Errors validationErrors=BLL.Utilities.ImageFileProcessing.ValidateSizeAndFormat(multipartRequestParser.FileContents);
//如果有错误
如果(validationErrors.Count>0)
{
//发回错误
抛出新的WebFaultException(validationErrors,System.Net.HttpStatusCode.BadRequest);
}
//保存图像(返回图像的标识符)
System.Guid imageId=BLL.Custom.BeamUSBuyingWindow.DataTransferObjects.Brand.SaveImage(multipartRequestParser.FileContents);
//为创建的资源设置响应状态和URI
WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(新的System.Uri(WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri+“/”+imageId.ToString());
返回imageId;
}
方法
ValidateSizeAndFormat
返回一个
Errors
对象数组,其中包含我期望的错误文本。这是一个相当大的应用程序


Chrome在jqXHR对象中发现了400个错误,IE8获得了200个成功,这让我有点困惑。尽管其他地方也有类似的Ajax错误处理,但这个问题只发生在文件上传插件上。

对不起,我上面的评论不在服务器端。我仔细阅读了本页:

我在这里放了一句话,这句话让我大开眼界,也许也让你大开眼界:)

是否使用多个浏览器出现错误?。如果您的电脑上安装了两个或多个Web浏览器,并且行为不相同(一个Web浏览器在访问网站时出现HTTP 400错误,另一个Web浏览器在访问同一网站时没有出现HTTP 400错误),则您的一个浏览器可能有缺陷。尝试查找问题浏览器的升级或安全修复程序。如果您最近更改了问题浏览器中的某些配置选项,请尝试反向更改以查看是否有帮助。


请阅读该页的其他内容。

400您从服务器端获得的信息。。。尝试发布web service/asp.net中使用的代码。我添加了一些服务器端代码。这是一个相当大的应用程序:D@SimonAdcock我对v9.9.2也有同样的问题-你找到解决办法了吗?@shrodes恐怕没有。我必须按照
if(data.jqXHR.responseText){/*假设失败*/}
的思路实现一个hack,这在我的情况下是有效的,但不是一个很好的通用解决方案。我的解决方案是检查
data.result
。如果
未定义
,则存在错误。但是我仍然不知道为什么
blueimp文件上传
总是将状态代码检测为200,即使存在服务器错误或网络错误。不过它在Chrome上运行得很好。嗨,SnakeYes,谢谢你的链接。我的问题可能不是很清楚。实际上,我希望看到400的响应,但实际上我在IE8中得到了200的响应。我想看到一个错误响应,但浏览器不知何故将其解释为成功响应。遗憾的是,升级浏览器不是一个选项,因为这是针对不想从IE8升级的公司客户机的。非常感谢你的帮助。