带有文件上传的JQuery Ajax表单在IE中不起作用
我正在使用Jquery Ajax表单上传文件,这在Chrome和Firefox中运行良好,但在IE中不起作用。它会弹出一个窗口,告诉我保存要上传的文件 如有必要,我的代码示例如下: HTML: 行动带有文件上传的JQuery Ajax表单在IE中不起作用,jquery,asp.net-mvc-3,internet-explorer,file-upload,ajaxform,Jquery,Asp.net Mvc 3,Internet Explorer,File Upload,Ajaxform,我正在使用Jquery Ajax表单上传文件,这在Chrome和Firefox中运行良好,但在IE中不起作用。它会弹出一个窗口,告诉我保存要上传的文件 如有必要,我的代码示例如下: HTML: 行动 [HttpPost] public JsonResult AddNewDocument(DocumentModel document) { if (ModelState.IsValid) { List<DocumentMo
[HttpPost]
public JsonResult AddNewDocument(DocumentModel document)
{
if (ModelState.IsValid)
{
List<DocumentModel> documents = null;
if (Session["Documents"] != null)
{
documents = (List<DocumentModel>)Session["Documents"];
var doc = documents.OrderByDescending(x => x.Number).Take(1).FirstOrDefault();
document.Number = doc != null ? doc.Number + 1 : 1;
document.FileName = document.File != null ? document.File.FileName : document.FileName;
documents.Add(document);
}
else
{
documents = new List<DocumentModel>();
document.Number = 1;
document.FileName = document.File != null ? document.File.FileName : document.FileName;
documents.Add(document);
Session["Documents"] = documents;
}
var displaydocs = documents.Select(x => new
{
Name = x.Name,
Number = x.Number,
File = x.File != null ? x.File.FileName : x.FileName,
Route = x.Route != null ? x.Route : "#",
});
return Json(displaydocs, JsonRequestBehavior.AllowGet);
}
else
{
return null;
}
}
同样,它适用于除IE8之外的所有浏览器。我可能不是唯一一个,但我还没有找到答案。尝试在AJAX调用中添加缓存:“false”。。。 比如:
$.ajax({
type:"POST",
url:'process.php',
cache:'false', //IE FIX
data: data,
success: function(){ //on success do something...
}
});
我问了这个问题。请在邮寄前搜索。委员会明确指出:
支持XMLHttpRequest级别2的浏览器将能够
无缝上传文件,甚至在上传过程中获得进度更新
收益对于较旧的浏览器,使用了一种回退技术
涉及iFrame,因为无法使用
XMLHttpRequest对象的1级实现。这是一个常见的问题
回退技术,但它具有固有的局限性。iframe
元素用作表单提交操作的目标,该操作
表示将服务器响应写入iframe。这很好
如果响应类型是HTML或XML,但如果
响应类型是脚本或JSON,两者通常都包含
使用实体引用时需要重复的字符
在HTML标记中找到
在使用时考虑脚本和JSON响应的挑战
在iframe模式下,表单插件允许嵌入这些响应
在textarea元素中,建议您对这些
与文件上载和旧版本结合使用时的响应类型
浏览器。但是,请注意,如果在
表单然后请求使用普通XHR提交表单(不是
iframe)。这会给服务器代码带来负担,让它们知道何时使用
一个文本区域,何时不显示
由于您要从控制器操作返回JSON,您需要尊重文档中所说的=>封装在
元素中。我还没有尝试使用textarea,但是如果我定义要在操作中返回的内容类型为text/html,则效果很好:
return new JsonResult() { ContentType = "text/html", Data = result };
public class DocumentModel
{
public int Number { get; set; }
[Required]
public string Name { get; set; }
[Required]
public HttpPostedFileBase File { get; set; }
public string FileName { get; set; }
public string Route { get; set; }
}
$.ajax({
type:"POST",
url:'process.php',
cache:'false', //IE FIX
data: data,
success: function(){ //on success do something...
}
});
return new JsonResult() { ContentType = "text/html", Data = result };