我在javascript文件中有一些代码需要将查询发送回服务器。问题是,我如何找到我所在脚本的url,因此我可以为ajax构建一个正确的请求URL。

即,//help/whatever等包含相同的脚本,而它始终需要从/data.json请求。此外,同一站点在不同的服务器上运行,其中<=> - 文件夹可能以不同方式放置。我有办法解析我包含Javascript(ez-publish模板)的相对网址,但不包含在javascript文件本身内。

是否有适用于所有浏览器的小脚本?

有帮助吗?

解决方案

为此,我喜欢将<link>元素放在页面的<head>中,其中包含用于请求的URL。它们可以由您的服务器端语言生成,因此它们始终指向正确的视图:

<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的字符串函数进行操作。

客户端无法在没有服务器告知的情况下确定webapp根目录,因为它不知道服务器的配置。您可以尝试的一个选项是使用head元素内的基本元素,让服务器动态生成它而不是硬编码(因此它显示了每个服务器的相关URL):

<base href="http://path/to/webapp/root/" />

然后将所有网址视为相对于此。因此,您只需向/data.json发出请求即可。但是,您需要确保应用程序中的所有其他链接牢记这一点。

如果脚本知道自己的文件名,则可以使用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') );

考虑到这种方法受文件名冲突的影响。

我在我的库主入口点(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可能看起来像:<!> quot; / sites_working / thesite / public_html <!> quot;在您的开发框中,只有<!> quot; / <!> quot;在具有虚拟主机(域名)的服务器上。

这个方法也很好,因为如果有人输入你的开发盒的IP地址,它将使用相同的IP地址来构建javascript文件夹的路径,而不是像<!> quot; localhost,<! > QUOT;如果您使用<!>“localhost <!>”;它将使用<!> quot; localhost <!> quot;建立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>

我认为后者会更快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top