2016-09-08 112 views
4

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

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

+8

使URL相对于域的根,例如''/ timer/check /'' –

+1

你可以做2件事。 1)使相关网址2)为您的网域制作一个全局变量,其中包含一个硬编码网址,然后将其附加到单个网址,并在生产或测试中只更改一个变量。 – VJI

回答

1

为了实现这一目标,你必须使用下面的标签写入你的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/

+0

我不知道谁投了票..但这个作品...是否有任何的投票理由? –

+0

@RoryMcCrossan,请检查它...我在五月份的项目中完成了这项工作......它也适用于JS。 –

+1

@RoryMcCrossan,检查.. https://jsfiddle.net/ptLzs7m5/1/ –

1

尝试这样

var host = window.location.hostname; 
var url = host + "/" + timer/check/; 

现在可以将URL传递到您的文章的方法

您可以使用此也

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,并在生产时指定prod 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 
} 

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