【问题标题】:Hard-coded URL's硬编码的 URL
【发布时间】:2016-09-08 07:48:11
【问题描述】:

我有一个关于硬编码网址的查询。当使用 jquery 从 JavaScript 进行 post 调用时,我会使用 $.post('http://localhost:8000/timer/check/'

现在这在我的开发服务器上运行良好。当我必须在另一台服务器上部署它时,我必须手动更改代码中的所有 url。那么如何避免硬编码网址呢?

【问题讨论】:

  • 使 URL 相对于域的根目录,例如 '/timer/check/'
  • 你可以做两件事。 1)制作相对网址 2)为您的域制作一个带有硬编码网址的全局变量,然后将其附加到各个网址,并且在生产或测试中只更改一个变量。

标签: javascript jquery url hardcode


【解决方案1】:

为此,您必须在元标记中使用以下标记

<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/

【讨论】:

  • 我不知道谁投了反对票.. 但这行得通... 有什么理由投反对票吗?
  • @RoryMcCrossan,请检查一下...我在可能的项目中做过...它也适用于 JS。
  • 它适用于现代浏览器,但不支持在旧浏览器中与 JS url 一起使用。我仍然建议您避免使用 &lt;base&gt; 标签,因为它有很多可能会破坏您的一天的警告,请参阅 stackoverflow.com/questions/1889076/…
【解决方案2】:

这样试试

 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

【讨论】:

    【解决方案3】:

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

    1) 使用$.post('./timer/check')。这将采用当前域并附加 url(推荐)

    2) 创建一个全局变量并在任何你想要的地方使用它。在开发时分配本地 url,在生产时分配产品 url。

    3) 创建一个包装器并始终使用该包装器来发送请求。使用您当前的状态(Dev 或 Prod)创建一个全局变量作为它的值并不断更改它。并像这样使用它-

    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
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2022-10-31
      • 1970-01-01
      • 2021-09-04
      • 2018-12-09
      • 2016-02-21
      • 1970-01-01
      • 2014-03-20
      • 2013-10-17
      相关资源
      最近更新 更多