我有一个关于硬编码URL的问题。当使用jquery从JavaScript进行POST调用时,我会这样做:$.post('http://localhost:8000/timer/check/'
现在,在我的开发服务器上可以正常工作。当我必须将其部署到另一个服务器上时,我必须手动更改代码中的所有URL。那么如何避免硬编码URL呢?
我有一个关于硬编码URL的问题。当使用jquery从JavaScript进行POST调用时,我会这样做:$.post('http://localhost:8000/timer/check/'
现在,在我的开发服务器上可以正常工作。当我必须将其部署到另一个服务器上时,我必须手动更改代码中的所有URL。那么如何避免硬编码URL呢?
<head>
<base href="{{your base url_here}}">
</head>
在此之后,您需要编写相对于此基本URL的路径。
例如:
<head>
<base href="http://localhost:8000/timer/check/">
</head>
http://localhost:8000/timer/check/test.php
。现在你可以在 ajax 调用中相对于基础 URL 写入 'test.php'
。<base>
标签,因为它有很多注意事项可能会让你的一天毁掉,请参见https://dev59.com/enI-5IYBdhLWcg3wYXL8 - Rory McCrossan var host = window.location.hostname;
var url = host + "/" + timer/check/;
window.location.protocol //you'll get your protocol `http` or `https`
window.location.port //this will return the port
这个常见问题有一些解决方案 -
1)使用 $.post('./timer/check')
。 这将获取当前域并附加url (推荐)
2)创建全局变量并在需要时使用它。 在开发过程中分配本地url,在生产环境中分配生产url。
3)创建一个包装器并始终使用该包装器发送请求。 创建一个具有您当前状态(开发或生产)作为其值的全局变量,并不断更改它。 然后像这样使用它-
post(url) {
var baseurl = '';
if(CURRENT_ENVIRONMENT=='DEV')
baseurl = 'http://localhost:8080';
else if(CURRENT_ENVIRONMENT=='PROD')
baseurl = 'http://yourwebsiteurl';'
$.post(baseurl+'/timer/check')
//and so on
}
你可以使用任何你喜欢的。
'/timer/check/'
。 - Rory McCrossan