2011-09-14 28 views
3

我編寫了下面的例程來根據我的codeigniter應用程序的選定國家來檢索城市。如何不在js文件中硬編碼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'); 
    }) 
}); 

,你可以看到,我硬編碼的URL(HTTP://localhost/main/index.php/city/get_data_by_country),我知道這是一個不好的做法,但我不能幫助它。

有沒有一個不乾淨的方式來不硬編碼的網址?我曾經使用codeigniter的base_url(),但由於我將例程移動到一個js文件,我不能再使用該函數。

回答

10

採取的行動(主要是)從我的答案上How to get relative path in Javascript?

你有兩個選擇:

  1. 構建配置/偏好JavaScript對象,其中包含了所有的環境特定設置:

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

    ,然後用config.base前綴的AJAX網址。

    您必須將配置對象放置在由PHP解析的位置;標準選擇在HTML元素<head>之內。別擔心它的一個小配置對象,其內容可以在每個頁面上更改,因此完全有理由將它粘貼在那裏。

  2. 使用<base />HTML標記爲所有相對URL設置URL前綴。這會影響所有相對URL的:形象的,鏈接等

就個人而言,我會去的選項1.你很可能會發現,配置對象派上用場了未來在其他地方。

+0

我忘了復出並挑選你的答案。我去選項2,因爲我不認爲base_url()將在.js文件上工作。謝謝。 – dqiu

+2

選項1更好,它不是一個js文件,它是一個PHP文件。 – qwertzman

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

+0

會不會'/ index.php'鏈接,通過'http://本地主機/ index.php',而不是通過'http://本地主機/主/ index.php'? –

+0

是的,它會錯過主要的文件夾部分。更新。 – Brandon

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'); 
})