如何获取 javascript 中的基 URL

我建立了一个网站与 CodeIgniter,我有各种资源,我加载与 Base _ url辅助函数喜欢这样

<link rel="stylesheet" type="text/css" href="'.base_url('assets/css/themes/default.css').'" id="style_color"/>

网站(www.mysite.com)

<link rel="stylesheet" type="text/css" href="http://www.mysite.com/assets/css/themes/default.css" id="style_color"/>

然后我可以像下面这样在 javascript 中将这个资源与另一个资源交换

$('#style_color').attr("href", "assets/css/themes/" + color_ + ".css");

它会尝试不使用 php 生成的绝对路径来加载资源,所以我的解决方案是在每个带有 php 的页面中添加一个这样的虚拟标记

<div id="base_url" class="'.base_url().'"></div>

然后我将 javascript 行修改为

$('#style_color').attr("href", $('#base_url').attr("class") + "assets/css/themes/" + color_ + ".css");

它确实可以工作,但是看起来一点也不优雅,所以,如果您能帮助我从 javascript 或其他解决方案中生成这个基本 URL,我将非常感激,谢谢:)


我更喜欢仅使用 Javascript 的解决方案,因为我使用的是 CodeIgniter,所以使用带有从 protocolindex.php的 URL 段的 document.base_url变量似乎很方便

document.base_url = base_url('index.php');

函数 base_url()

function base_url(segment){
// get the segments
pathArray = window.location.pathname.split( '/' );
// find where the segment is located
indexOfSegment = pathArray.indexOf(segment);
// make base_url be the origin plus the path to the segment
return window.location.origin + pathArray.slice(0,indexOfSegment).join('/') + '/';
}
257701 次浏览

通过在每个页面模板中生成以下代码行,可以让 PHP 和 JavaScript 协同工作:

<script>
document.mybaseurl='<?php echo base_url('assets/css/themes/default.css');?>';
</script>

然后,您可以在 JavaScript 中的任何地方引用 document.mybaseurl。这样可以节省一些调试和复杂性,因为这个变量始终与 PHP 计算保持一致。

JavaScript 中的基 URL

使用 window.location可以很容易地在 JavaScript 中访问当前的 URL

你可以通过这个 locations对象访问这个 URL 的片段,例如:

// This article:
// https://stackoverflow.com/questions/21246818/how-to-get-the-base-url-in-javascript


var base_url = window.location.origin;
// "http://stackoverflow.com"


var host = window.location.host;
// stackoverflow.com


var pathArray = window.location.pathname.split( '/' );
// ["", "questions", "21246818", "how-to-get-the-base-url-in-javascript"]

在 Chrome 开发工具中,你只需在控制台中输入 window.location,它就会返回所有可用的属性。


进一步的读数可在 这个堆栈溢出线程上找到

一种方法是使用 script 标记将变量导入到视图中:

<script type="text/javascript">
window.base_url = <?php echo json_encode(base_url()); ?>;
</script>

在这里,我用 json _ encode 包装 base _ url,这样它就会自动将任何字符转义为有效的 Javascript。我将 base _ url 放到全局窗口中,这样您就可以通过调用 base _ url 在任何地方使用它,但是请确保将 script 标记放在调用它的任何 Javascript 之上。举个例子:

...
$('#style_color').attr("href", base_url + "assets/css/themes/" + color_ + ".css");

这只需要执行这个变量即可完成。

var base_url = '<?php echo base_url();?>'

这将有一个基本的 url,现在创建一个 javascript 函数,该函数将使用此变量

function base_url(string){
return base_url + string;
}

现在,这将始终使用正确的路径。

var path    =   "assets/css/themes/" + color_ + ".css"
$('#style_color').attr("href", base_url(path) );
var baseTags = document.getElementsByTagName("base");
var basePath = baseTags.length ?
baseTags[ 0 ].href.substr( location.origin.length, 999 ) :
"";

JavaScript 中的基 URL

下面是您的项目用 JavaScript 获取基本 URL 的简单函数。

// base url
function base_url() {
var pathparts = location.pathname.split('/');
if (location.host == 'localhost') {
var url = location.origin+'/'+pathparts[1].trim('/')+'/'; // http://localhost/myproject/
}else{
var url = location.origin; // http://stackoverflow.com
}
return url;
}

我可能会迟到,但对于所有未来的极客。首先,我假设您想在 .js文件中调用 base _ url。因此,让我们考虑您正在调用下面的示例 .js文件

Sample.js

var str = $(this).serialize();


jQuery.ajax({
type: "POST",
url: base_url + "index.php/sample_controller",
dataType: 'json',
data: str,
success: function(result) {
alert("Success");
}

在上面的代码中没有指定 base _ url。因此代码不能正常工作。但是可以肯定的是,您将使用 <script> </script>标记在 <head></head><body></body>of 视图文件之间调用 .js。因此,要调用 base_url in.js文件,我们必须编写下面的代码,您计划在其中调用 .js文件。建议您创建通用的头文件,并将下面的代码以及所有调用样式表(.css)和 javascript (.js)文件放在那里。就像下面的例子。

通用头文件

<head>


<link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro|Open+Sans+Condensed:300|Raleway' rel='stylesheet' type='text/css'>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/js/sample.js">


<script>
var base_url = '<?php echo base_url(); ?>';
</script>




</head>

现在的 base_url将工作在 sample.js文件。希望它有所帮助。

为了得到与 codeigniterbase_url完全相同的结果,你可以这样做:

var base_url = window.location.origin + '/' + window.location.pathname.split ('/') [1] + '/';

如果您使用纯 Javascript 文件,这将更有用。

Resources/views/layouts/app.blade.php文件中

<script type="text/javascript">
var baseUrl = '<?=url('');?>';
</script>

如果你想知道网页上具体指明了什么,只需使用:

document.querySelector('head base')['href']

假设您有自己的全局脚本文件,并且不希望在其他文件中重复定义该 URL。这就是 BASE _ URL 发挥作用的地方。

在 global _ script. js 文件中执行以下操作

<script>
var BASE_URL = "http://localhost:8000";
</script>

然后你可以在任何地方使用这个变量来调用你的 URL。

<script>
fetch(`\{\{BASE_URL}}/task-create/`,{
..............
            

}).then((response) => {
.............
})
</script>