繁体   English   中英

使用jquery Ajax处理动态HTTP Content-Type

[英]Handling dynamic HTTP Content-Type with jquery Ajax

我有一个perl脚本URL,它给我一个ZIP文件,它处理数据并动态地将Content-Type设置为http-header中的'application/zip'

Perl代码如下所示:

WPHTTPResponse::setHeader( 'Content-disposition', 'attachment;filename="test.zip"');
WPHTTPResponse::setHeader( 'Content-type', 'application/zip');  
print $result;

在前端,我在HREF中直接使用此脚本:

      <a href="/script">Download</a>

但是如果perl脚本中$result为NULL,我需要显示警告消息。

我的想法是:如果$ result不为null,我将发送带有Content-Type=>application/zip的文件,否则我将发送JSON响应,并显示没有要下载的文件的错误消息。

为此,我需要使用JS动态检查内容类型:

$.ajax({
  url: '/script',
  data: {....},
  success: function(response) {
     if(response.contentType == 'application/zip'){
        //download using javascript
     }
     else{
        $.parseJSON(response);
        alert(response.msg);
     }
  }
});

我很感激任何帮助。

虽然您的方法应该可行,但这种情况下使用HTTP错误代码可能是一个不错的选择。

根据$ result为null的原因,其中一个应该是合适的。

400 Bad Request
406 Not Acceptable
410 Gone

这将使您的代码稍微更“明显”,因为您将HTTP状态用于其目的,而不是在代码中以专有方式重新实现完全相同的东西。 恕我直言,它也会使你的代码更容易维护,因为它会将成功与错误分开。

您仍然可以将JSON作为错误响应的一部分包含在内,以便能够显示有关请求未确切导致任何数据返回给客户端的确切原因的信息。

顺便说一下,我会避免使用404作为错误代码,即使它在技术上是最“适当”的代码,只是因为如果发生真正的404错误会导致混淆。

在下载之前使用HEAD -request检查内容大小。

客户端:

  • click -event处理程序附加到<a> -element。
  • click -event发送HEAD -request抛出XHR
  • XHR -response上检查内容大小。
  • 如果size为零,则显示alert并阻止默认事件处理程序。
  • 如果大小不为零,则无事可做。

服务器端:

  • HEAD -request上计算内容大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM