【问题标题】:Catch OS exception when Javascript calls Perl scriptJavascript 调用 Perl 脚本时捕获操作系统异常
【发布时间】:2014-09-28 16:20:38
【问题描述】:

我有一个 Java 脚本(比如)a.js,它通过以下方式调用 Perl 脚本 b.pl:

JavaScript:xmlhttpPost("http://:/cgi-bin/b.pl");

xmlhttpPost 类似于:

function xmlhttpPost(strURL)
{
    var xmlHttpReq=createXMLHttpRequest();
    xmlHttpReq.open('POST', noCache(strURL), true);

createXMLHttpRequest 在哪里创建 ActiveXObject

b.pl 调用另一个 perl 模块,c.pm。在c.pm中,有一段代码可以捕捉OS 例外:

eval {
    $ftp->put($filenamepath); };
if ($@) {
    return "FTP time-out"; }

$ftp 利用 Net::FTP。

如果我从命令行运行 b.pl 并且在使用 ftp 放置文件时出现超时异常,则该异常被正确捕获。但是,如果 b.pl 通过 a.js 运行,则不会捕获到超时异常。

请指教。谢谢!

【问题讨论】:

  • 是什么让你认为异常没有被捕获?
  • createXMLHttpRequest 可能不是 activex,除非您仍然运行 IE5 或 IE6? noCache() 是做什么的?在字符串末尾添加“&random=123456”以使其唯一以防止缓存,它是否正常工作(尝试包含alert(noCache(strURL))?如果只返回“FTP超时”,这可能被捕获为(格式错误的)http 标头。尝试返回例如 return "Pragma: no-cache\nContent-Type: text/html\n\n<pre>FTP time-out</pre>"
  • 当异常被捕获时,“FTP超时”将返回给b.pl。 b.pl 基本上将返回的任何内容打印到平面文件中。当我从命令行运行 b.pl 时,我看到文件中打印了“FTP 超时”。另一方面,当通过 a.js 调用 b.pl 时,我没有看到该消息。

标签: javascript perl exception-handling


【解决方案1】:

我会考虑调查CGI::Carp。似乎有几种不同的方法可能会让您对该文档感兴趣。

【讨论】:

  • 当异常被捕获时,会返回“FTP超时”
猜你喜欢
  • 2012-04-29
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2014-12-30
相关资源
最近更新 更多