我在javascript文件中有一些代码需要将查询发送回服务器。问题是,我如何找到我所在脚本的url,因此我可以为ajax构建一个正确的请求URL。
即,/
,/help
,/whatever
等包含相同的脚本,但始终需要/data.json
请求。此外,同一站点在不同的服务器上运行,其中/
- 文件夹的放置方式可能不同。我有办法解析我包含Javascript(ez-publish模板)的相对网址,但不包含在javascript文件本身内。
是否有适用于所有浏览器的小脚本?
答案 0 :(得分:23)
为此,我希望将<link>
个元素放在页面的<head>
中,其中包含用于请求的网址。它们可以由您的服务器端语言生成,因此它们始终指向正确的视图:
<link id="link-action-1" href="${reverse_url ('action_1')}"/>
变为
<link id="link-action-1" href="/my/web/root/action-1/"/>
可以通过Javascript检索:
document.getElementById ('link-action-1').href;
答案 1 :(得分:3)
document.location.href
将为您提供当前的URL,然后您可以使用JavaScript的字符串函数进行操作。
答案 2 :(得分:3)
客户端无法在没有服务器告知的情况下确定webapp根目录,因为它不知道服务器的配置。您可以尝试的一个选项是使用head元素内的基本元素,让服务器动态生成它而不是硬编码(因此它显示了每个服务器的相关URL):
<base href="http://path/to/webapp/root/" />
然后将所有网址视为相对于此。因此,您只需向/data.json发出请求即可。但是,您需要确保应用程序中的所有其他链接牢记这一点。
答案 3 :(得分:2)
如果脚本知道自己的文件名,则可以使用document。 getElementsByTagName ()。遍历列表,直到找到与您匹配的脚本,然后以这种方式提取完整(或相对)URL。
以下是一个例子:
function getScriptUrl ( name ) {
var scripts = document.getElementsByTagName('script');
var re = RegExp("(\/|^)" + name + "$");
var src;
for( var i = 0; i < scripts.length; i++){
src = scripts[i].getAttribute('src');
if( src.match(re) )
return src;
}
return null;
}
console.log( 'found ' + getScriptUrl('demo.js') );
考虑到这种方法受文件名冲突的影响。
答案 4 :(得分:0)
我在我的库主入口点(main.php)中包含以下代码:
/**
* Build current url, depending on protocal (http/https),
* port, server name and path suffix
*/
$site_root = 'http';
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on")
$site_root .= "s";
$site_root .= "://" . $_SERVER["SERVER_NAME"];
if ($_SERVER["SERVER_PORT"] != "80")
$site_root .= ":" . $_SERVER["SERVER_PORT"];
$site_root .= $g_config["paths"]["site_suffix"];
$g_config["paths"]["site_root"] = $site_root;
$ g_config是一个包含配置选项的全局数组。因此,site_suffix可能看起来像:开发框中的“/ sites_working / thesite / public_html”,以及带有虚拟主机(域名)的服务器上的“/”。
这种方法也不错,因为如果有人输入你的开发盒的IP地址,它将使用相同的IP地址来构建javascript文件夹的路径而不是像“localhost”这样的东西,如果你使用“ localhost“它将使用”localhost“来构建URL。
由于它还检测到SSL,因此如果您曾向服务器添加SSL支持,则不必担心通过HTTP或HTTPS发送资源的天气。
然后,在您的模板中,使用
<link id="site_root" href="<?php echo $g_config["paths"]["site_root"] ?>"/>
或者
<script type = "text/javascript">
var SiteRoot = "<?php echo $g_config["paths"]["site_root"]; ?>";
</script>
我认为后者会更快。