在下载Excel文件时出现错误"Requested JSON parse failed"
(Error "Requested JSON parse failed" in downloading excel file) 这个问题的出现的原因是在下载Excel文件时,发生了请求JSON解析失败的错误。解决方法是使用轻量级的JavaScript在客户端创建Excel文件,并使用download属性进行下载。
为什么要使用后端来创建和下载Excel文件,这样做过于复杂,而且下载部分很困难。可以使用客户端上的JavaScript来完成这个任务,它可以从XML创建Excel文件,并使用download属性进行下载。
以下是解决问题的代码示例:
var data_type = 'data:application/vnd.ms-excel'; var table_div = document.getElementById('table_wrapper'); var table_html = table_div.outerHTML.replace(/ /g, '%20');
你可以在这里找到解决方案:[Here is Solution](https://codepen.io/kostas-krevatas/pen/mJyBwp)
(Error "Requested JSON parse failed" in downloading excel file)这个问题的出现的原因可能是服务器在发送文件时出现了错误。解决方法可以尝试将响应的Content Type更改为application/vnd.ms-excel。另外,如果需要将Excel文件保存到本地,可以使用HTML5的< a download>标签。至于如何下载获取到的数据,由于JavaScript的安全限制,无法直接从网页保存文件到文件系统,但可以将文件保存到浏览器的本地存储中,或使用相关的库,或使用之前提到的< a download>标签。如果有一个按钮触发Ajax调用的话,可以使用Download来实现下载。
在下载Excel文件时出现了错误"Requested JSON parse failed"。这个错误的原因是AJAX调用期望得到JSON数据作为返回值,但是控制器的操作方法返回的数据类型与JSON对象不同。通过检查控制器流程并省略一些无关的代码,我们可以得到以下内容:
public ActionResult ExportReportToExcel(string X, string Y, string Z) { // 其他操作 var customer = _authenticationService.CurrentCustomer; if (customer == null) return new LmsHttpUnauthorizedResult(); try { // 其他操作 return null; // 这里返回了null值,而不是预期的JSON对象 } catch (Exception ex) { return Redirect(TempData["PDFPrevUrl"].ToString()); } }
默认情况下,jQuery根据响应的MIME类型来推断dataType参数(xml、json、script或html,默认为JSON)。因此,你需要通过以下方法之一返回一个JSON对象:
// ContentResult return Content("message_text", "application/json"); // JsonResult return Json("message_text", JsonRequestBehavior.AllowGet);
如果你想通过AJAX返回文件进行下载,你可以使用`window.location`或`window.location.href`进行重定向:
$.ajax({ url: importUrl, // 这里应该是指向JsonResult操作方法的URL data: { X: "12", Y: "12", Z: "12" }, success: function (data) { // 处理数据响应 window.location = downloadUrl; // 重定向到FileResult操作方法 }, error: function (jqXHR, exception) { // 其他操作 } }); // 返回Excel二进制文件的示例控制器 public FileResult DownloadFile(string fileName) { // 其他操作 byte[] content = TempData["something"] as byte[]; return File(content, "application/vnd.ms-excel", fileName); }
注意:上面的解释大多是简单的,你的当前实现可能与给出的示例不同。
类似的问题:
- [Download Excel file via AJAX MVC](https://stackoverflow.com/questions/16670209)
- [jQuery returning "parsererror" for ajax request](https://stackoverflow.com/questions/5061310)