我有需要发送的查询回服务器的JavaScript文件的一些代码。 现在的问题是,我该如何找到我在脚本中的URL,这样我就可以构建AJAX适当的请求URL。
也就是说,同样的剧本被包含在/
, /help
, /whatever
,等等,而它总是需要从请求/data.json
。 此外,在同一部位在不同的服务器,在运行/
-folder可能有不同的放置。 我有办法来解决相对URL,其中包括我的JavaScript(EZ-发布模板),而不是javascript文件本身。
是否有小脚本,将针对此做出所有的浏览器?
为此,我喜欢把<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;
document.location.href
会给你当前的URL,然后你就可以用JavaScript操作的字符串函数。
有没有办法使客户能够确定Web应用程序根没有服务器被告知,因为它没有服务器的配置的知识。 你可以尝试一种选择是使用基本元素head元素中,让服务器生成动态地而不是硬编码(所以它显示了每个服务器相关的URL):
<base href="http://path/to/webapp/root/" />
然后,所有的URL将被视为相对于此。 因此,你只会让你的要求/data.json。 然而,你需要确保应用程序中所有其他环节牢记这一点。
如果脚本知道它自己的文件名,你可以使用文档。 的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') );
考虑到这种做法是受到碰撞名。
我包括我的图书馆主入口点(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”来构建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>
我想后者会更快。