【发布时间】:2016-09-02 10:57:02
【问题描述】:
我正在使用 dropzone.js 通过 ajax 上传文件,但我需要为不支持 XMLHttpRequest 的旧浏览器实现回退方法。
为了解决这个问题,我使用jQuery Iframe Transport plugin
$.ajax({
url: "/File/Create",
type: 'POST',
cache: false,
data: { fallback: true },
files: $("form :file"),
iframe: true,
processData: false
}).complete(function (data) {
console.log(data.message);
});
由于 jquery iframe 传输无法访问服务器响应的 HTTP 标头,因此使用 jQuery 提供的自动内容类型检测并不像使用常规 XHR 那样简单。
一种解决方法是发回一个仅包含<textarea> 元素的 HTML 文档,该元素具有指定 MIME 类型的数据类型属性,并将实际有效负载放入 textarea:
<textarea data-type="application/json">
{"ok": true, "message": "Thanks so much"}
</textarea>
所以在我的 asp mvc 控制器中,我返回如下响应:
if (fallback == "true")
{
return Content("<textarea data-type=\"application/json\">{\"ok\": false, \"message\": \"Success.\"}</textarea>");
}
返回以下 javascript 对象:
Object { readyState=4, responseText="{"ok": false, "message": "Success"}", responseJSON Object {ok=false, message="Success"}
如何解析此响应以输出 Json 消息。以下给我未定义?
.complete(function (data) {
console.log(data.message);
});
【问题讨论】:
-
尝试在请求中添加 dataType:"json"
-
只发送有效的 JSON 格式。它会工作
-
@Ashish 我不能,因为我正在使用 jquery-iframe-transport
-
为什么?该库已严重过时。如果您想上传文件,请使用
FormData。然后,您实际上可以直接返回 JSON,而不必使用变通方法 -
您还应该考虑实现FileSizeAttribute 来为您提供客户端和服务器端验证
标签: jquery json ajax asp.net-mvc dropzone.js