1

我有一个简单的 perl 子例程,在决定是否打印链接到它的脚本或我们本地托管的副本之前,它会检查 google 是否仍在托管 jquery 1.6 的副本。

这是我正在使用的代码的副本。

my $jquery_host = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js";
my $header = LWP::Simple::head($jquery_host);

if(defined $header) {
    return qq{<script type="text/javascript" src="$jquery_host"></script>};
}
else {
    return qq{<script type="text/javascript" src="$localPath"></script>};
}

当我在此命令行上运行此代码时,检索响应没有问题,并且它正确打印出链接到 google 的 jquery 副本的脚本标记。但是,当我实际从构建 html 页面的 perl 脚本中调用它时,它每次都找不到任何东西,并打印出链接到我们自己的副本的脚本标记。

哪些权限或其他类型的障碍可能会阻止此连接?

谢谢你的帮助。

注意:到目前为止,这仅在我们的本地测试服务器上运行。命令行也在测试服务器上运行。

4

2 回答 2

1

我可以确认您的代码是独立运行的。尝试将对 header 的赋值包装到 if 语句中;实际上也内联了 url 字符串。唯一可能让您感到困惑的是您的服务器脚本正在使用某些代理或 tcp 包装器的机器上运行,这些代理或 tcp 包装器不允许您从 google.com 获取 jQuery。我们无法真正帮助您解决这些非常具体的本地问题。

如果我只是在猜测,我会说你有多个 Perl 环境在运行,并且你的命令行正在使用一个很好的版本,但你的 Web 服务器正在调用另一个版本,一个可能有以破坏您正在做的事情的方式进行强化,例如建议在 AppEngine 中使用的内容。但我上面的建议是基于这样的想法,即围绕此代码段的代码可能会混淆您正在使用的变量。尽管在 mod_perl 中使用 io 套接字似乎确实出现了这种问题

程序片段:

$ perl -MLWP::Simple -e '
if(head("http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js")) {
    print qq{<script type="text/javascript"
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js">
    </script>};
} else {
    print qq{<script type="text/javascript" src="$localPath"></script>};
}'

输出:

<script type="text/javascript"
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js">
</script>

我也会写这个,以便将一些$scriptPath分配给 jQuery 路径或$localPath,然后通过 if 语句,我将只使用 now 确定的$scriptPath. 但这也许只是我。

于 2011-10-31T20:11:23.660 回答
0

我不知道为什么您的代码不起作用,但无论如何您都不应该使用它:仅仅因为您的服务器可以访问ajax.googleapis.com并不意味着用户的浏览器可以。

只需在客户端上使用 JavaScript 进行回退即可。这是基于此答案的一些示例代码:

return <<"END";
<script type="text/javascript" src="$jquery_host"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined') document.write(
    '<'+'script type="text/javascript" src="$localPath"><'+'/script>'
);
</script>
END
于 2011-11-01T21:58:39.917 回答