【问题标题】:AJAX on url that returns either file or JSON response?url上的AJAX返回文件或JSON响应?
【发布时间】:2017-02-09 01:16:52
【问题描述】:

我有一个 url,它返回一个文件,或者错误时返回一个 JSON 响应。当请求被接受时,它会以一个文件作为响应,并且应该提示用户下载(正如人们在这种情况下所期望的那样)。当请求出现问题时,响应是一个 JSON 对象,应通过 javascript 进一步处理。

请求是通过 javascript(AJAX、在新选项卡中打开、生成 iframe 等)发出的。我该如何通过 javascript 处理来自同一个 url 的两种响应?


我目前正在修改的策略(尚未开始工作)是:

  1. 生成 iframe
  2. 将表单注入 iframe
  3. 在 iframe 上设置 error 事件处理程序
  4. 触发表单提交(我可以控制响应标头,因此我可以使用Content-Disposition: attachment 强制保存对话框。)
  5. 如果触发了 error 事件处理程序,则废弃 json 响应的 iframe

事实证明,当 iframe 指向触发保存对话框的文件时,iframe 不会触发 error 事件,并且在某些浏览器中不会触发 load 事件。

【问题讨论】:

  • 出现错误时,无论成功的类型响应如何,都会得到 Function(jqXHR jqXHR, String textStatus, String errorThrown )。所以应该不是问题
  • @BryanDellinger 这是真的。但是,如果成功,则应提示用户下载提供的文件。我想知道的是如何将响应提交给用户进行保存(就像您在正常下载时所做的那样),同时仍然捕获同一请求的可能错误响应。
  • 知道了,类似的问题stackoverflow.com/questions/3077242/… 建议使用 html5 下载属性
  • @BryanDellinger 似乎没有任何方法可以捕获错误响应。
  • 所以几个月前我刚刚成功了,我使用 jquery append 将下载链接放在一个 div 中,并以正常方式处理错误。

标签: javascript jquery ajax


【解决方案1】:

在点击该 url 之前,在您的情况下,似乎必须存在一些参数才能让您的函数调用提示您返回文件。

编写一个函数,首先检查您为该 url 序列化的数据。如果您正在序列化的数据通过验证,此函数可以调用 url,或者如果您正在序列化的数据未通过验证,则返回错误 JSON 响应。

序列化之前的数据验证可以在客户端使用 javascript 或在服务器端完成。理想情况下,您希望在客户端和服务器上都进行验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2015-03-29
    • 2018-12-24
    • 2010-11-27
    相关资源
    最近更新 更多