如何不在js文件中硬编码codeigniter链接

时间:2011-09-14 11:20:33

标签: javascript jquery codeigniter

我编写了以下例程,根据所选国家/地区为我的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文件,我不再能够使用该函数。

3 个答案:

答案 0 :(得分:10)

(大部分)来自How to get relative path in Javascript?的答案。

你有两个选择:

  1. 在JavaScript中构建配置/首选项对象,其中包含您所有特定于环境的设置:

     var config = {
         base: "<?php echo base_url(); ?>",
         someOtherPref: 4
     };
    

    然后使用config.base为AJAX网址添加前缀。

    您必须将配置对象放在由PHP解析的位置;标准选择在<head> HTML元素内。不要担心它是一个小的配置对象,其内容可以在每个页面上更改,因此完全可以将其粘贴在那里。

  2. 使用<base /> HTML标记为所有相对网址设置网址前缀。这会影响所有相对网址:图片,链接等。

  3. 就个人而言,我会选择选项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');
})