我编写了以下例程,根据所选国家/地区为我的codeigniter应用程序检索城市。
$(document).ready(function() {
$("select#cbo_country").change(function() {
$.post("http://localhost/main/index.php/city/get_data_by_country", {
int_country_id : $(this).val()
},
function(data) {
// some code here
},'json');
})
});
正如你所看到的,我对网址进行了硬编码(http://localhost/main/index.php/city/get_data_by_country),我知道这是一个不好的做法,但我无法帮助它。
有没有一个很好的干净方法来不对网址进行硬编码?我以前使用codeigniter的base_url(),但由于我将例程移动到js文件,我不再能够使用该函数。
答案 0 :(得分:10)
(大部分)来自How to get relative path in Javascript?的答案。
你有两个选择:
在JavaScript中构建配置/首选项对象,其中包含您所有特定于环境的设置:
var config = {
base: "<?php echo base_url(); ?>",
someOtherPref: 4
};
然后使用config.base
为AJAX网址添加前缀。
您必须将配置对象放在由PHP解析的位置;标准选择在<head>
HTML元素内。不要担心它是一个小的配置对象,其内容可以在每个页面上更改,因此完全可以将其粘贴在那里。
使用<base />
HTML标记为所有相对网址设置网址前缀。这会影响所有相对网址:图片,链接等。
就个人而言,我会选择选项1.您很可能会发现配置对象在其他地方派上用场。
答案 1 :(得分:2)
将"http://localhost/main/index.php/city/get_data_by_country"
更改为"/main/index.php/city/get_data_by_country"
,无论您的基本网址是什么,它都会有效。
这是有效的,因为/
之前的main/index.php
表示“从根开始并转到index.php
文件夹中的main
文件。”
这是除非您的文档根文件夹设置为main
文件夹,如果是,请取出main
答案 2 :(得分:0)
您可以做的一件事是向页面上的元素添加data-baseurl
属性(body
元素有效)。然后你可以从JavaScript文件中获取它。
<body data-baseurl="<?=base_url()?>">
然后在JavaScript中:
$("select#cbo_country").change(function() {
var baseURL = $('body').data('baseurl')
$.post(baseURL+"city/get_data_by_country", {
int_country_id : $(this).val()
},
function(data) {
// some code here
},'json');
})