【问题标题】:Parse Javascript Object解析 Javascript 对象
【发布时间】: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


【解决方案1】:

想通了。只需要执行以下操作:

console.log(data.responseJSON.message);

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多