【问题标题】:ajax upload cannot process JSON response or gives download popupajax 上传无法处理 JSON 响应或给出下载弹出窗口
【发布时间】:2011-02-18 05:53:23
【问题描述】:

我正在使用 Andris Valums 的 AJAX 插件:

效果很好,只是我无法发送正确的 JSON 作为响应。 在发送 JSON 编码的响应之前,我将标头设置为“Content-Type”、“application/json”,并且在插件中我说我期待 JSON:

响应类型:“json”,

这给了我一个下载弹出窗口,要求下载 JSON/REPONSE 文件。 奇怪的是,当我没有为我的回复添加正确的“Content-Type”时,它会起作用。

当然我想传递正确的响应类型,因为我所有的 jQuery 1.4 调用都依赖于正确的 JSON。

有没有其他人遇到过同样的问题,或者有没有人愿意尝试一下?

我很想使用这个插件,但前提是我可以返回具有正确内容类型的正确 JSON

【问题讨论】:

    标签: jquery ajax json upload response


    【解决方案1】:

    插件创建不可见的文件输入 您提供的按钮的顶部,所以当 用户正常点击您的按钮 显示文件选择窗口。和 用户选择文件后,插件 提交包含文件输入的表单 到 iframe。所以这不是真正的ajax 上传,但带来相同的用户 经验。

    由于插件不是真正的 Ajax,并且因为您将内容类型设置为 application/json,您将得到的唯一响应将是文件下载对话框。

    唯一的方法(我可以看到)是删除您设置的内容类型并在 javascript 中使用类似

    var jsonObj = eval('(' + response + ')');
    

    几天前我使用了相同的插件,使用了上述方法。

    【讨论】:

    • 有没有比在这个插件中使用 eval() 更好的方法?
    【解决方案2】:

    您不必将 application/json 指定为响应 Content-Type。

    您可以使用 Content-Type:text/plain 并使用 eval( '(' + response ')') 函数来评估您的响应并将其分配给 JavaScript 变量。

    Damon 给出的例子更详细地解释了它。

    您可能要检查的其他事项:

    • 确保在发送任何输出之前发送标头
    • 确保您的响应是有效的 JSON 编码字符串

    【讨论】:

    • 谢谢,但这里有同样的问题:我宁愿不使用 eval(),还有其他方法可以获取 json 格式的响应吗?我应该在这里使用解析器吗?
    【解决方案3】:

    我也遇到了同样的问题,我认为除了 json 之外的任何其他方法都没有帮助......

    我认为这与 iframe 内容在被 eval()'ed 到 JSON 对象之前被解释为响应字符串的方法有关。

    如果服务器返回的 json_encode()'ed 字符串包含带有引号 (\") 的 HTML,则 ajaxupload 使用的字符串在 eval 之前以某种方式转义,从而破坏了 JSON 对象。

    不过,我还没有找到修复它的方法:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多