como não codificar link codeigniter no arquivo js

Eu escrevi a rotina abaixo para recuperar a cidade com base no país selecionado para o meu aplicativo 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'); }) }); 

Como você pode ver, codifiquei a URL (http: //localhost/main/index.php/city/get_data_by_country) e sei que é uma prática ruim, mas não consigo evitar.

Existe uma maneira legal e limpa de não codificar o URL? Eu costumava usar o base_url () do codeigniter, mas como eu movo a rotina para um arquivo js, ​​não consigo mais usar a function.

Tomado (principalmente) da minha resposta sobre como obter o caminho relativo em JavaScript? .

Você tem duas opções:

  1. Crie um object de configuração / preferências em JavaScript que contenha todas as configurações específicas do seu ambiente:

      var config = { base: "", someOtherPref: 4 }; 

    e, em seguida, prefixar a URL do AJAX com o config.base .

    Você tem que colocar o object de configuração em um lugar que é analisado pelo PHP; a escolha padrão está dentro do elemento HTML . Não se preocupe se é um pequeno object de configuração, cujo conteúdo pode mudar em cada página, então é perfeitamente recomendado colocá-lo lá.

  2. Use a tag HTML para definir o prefixo de URL para todos os URLs relativos. Isso afeta todos os URLs relativos: imagens, links etc.

Pessoalmente, eu iria para a opção 1. Você provavelmente vai encontrar esse object de configuração que vem a calhar em outro lugar.

Altere "http://localhost/main/index.php/city/get_data_by_country" para "/main/index.php/city/get_data_by_country" e ele funcionará, independentemente da sua URL base.

Isso funciona porque o / before main/index.php diz “inicie na raiz e vá até o arquivo index.php na pasta main “.

Isto é, a menos que a pasta raiz do documento esteja definida para a pasta main , se for o caso, retire a pasta main

Uma coisa que você pode fazer é adicionar um atributo data-baseurl a um elemento na página (o elemento body funciona). Então você pode pegar isso do arquivo JavaScript.

  

Então em 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'); })