硬编码的URL

6

我有一个关于硬编码URL的问题。当使用jquery从JavaScript进行POST调用时,我会这样做:$.post('http://localhost:8000/timer/check/'

现在,在我的开发服务器上可以正常工作。当我必须将其部署到另一个服务器上时,我必须手动更改代码中的所有URL。那么如何避免硬编码URL呢?


9
将URL相对于域名根目录进行设置,例如 '/timer/check/' - Rory McCrossan
1
你可以做两件事情。1)制作相对URL 2)创建一个全局变量,其中包含一个硬编码的域名URL,并将其附加到各个URL上,在生产或测试中仅更改一个变量。 - VJI
3个回答

3
为了实现这一点,您需要在meta标签中使用以下标记:
<head>
<base href="{{your base url_here}}">
</head>

在此之后,您需要编写相对于此基本URL的路径。

例如:

<head>
    <base href="http://localhost:8000/timer/check/">
</head>

如果完整的 URL 是 http://localhost:8000/timer/check/test.php。现在你可以在 ajax 调用中相对于基础 URL 写入 'test.php'
例如:https://jsfiddle.net/ptLzs7m5/1/

我不知道是谁点了踩,但这个代码是有效的。有什么理由踩它吗? - Haresh Vidja
@RoryMcCrossan,请检查一下...我在许多项目中都做过这个...它也适用于JS。 - Haresh Vidja
它可以在现代浏览器中正常工作,但不支持在旧版浏览器中使用JS URL。我仍然建议您避免使用<base>标签,因为它有很多注意事项可能会让你的一天毁掉,请参见https://dev59.com/enI-5IYBdhLWcg3wYXL8 - Rory McCrossan

1
尝试这样做。
 var host = window.location.hostname;
 var url = host + "/" + timer/check/;

现在您可以将URL传递给您的POST方法。
您也可以使用这个。
 window.location.protocol   //you'll get your protocol `http` or `https` 
 window.location.port       //this will return the port

0

这个常见问题有一些解决方案 -

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
}

你可以使用任何你喜欢的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接