как не кодировать кодовую ссылку в файле js - PullRequest
3 голосов
/ 14 сентября 2011

Я написал подпрограмму ниже, чтобы получить город на основе выбранной страны для моего приложения 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) и знаю, что это плохая практика, но я ничего не могу поделать.

Есть ли хороший чистый способ не жестко кодировать URL? Раньше я использовал base_url () codeigniter, но так как я переместил подпрограмму в файл js, я больше не могу использовать эту функцию.

Ответы [ 3 ]

10 голосов
/ 14 сентября 2011

Взято (в основном) из моего ответа на Как получить относительный путь в Javascript? .

У вас есть два варианта:

  1. Создайте объект конфигурации / предпочтений в JavaScript, который содержит все параметры, относящиеся к вашей среде:

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

    , а затем префикс AJAX url с config.base.

    Вы должны поместить объект конфигурации в место, которое анализируется PHP; стандартный выбор находится внутри элемента <head> HTML. Не беспокойтесь, это небольшой объект конфигурации, содержимое которого может меняться на каждой странице, так что совершенно разумно вставить его туда.

  2. Используйте HTML-тег <base />, чтобы задать префикс URL для всех относительных URL. Это влияет на все относительные URL: изображения, ссылки и т. Д.

Лично я бы выбрал вариант 1. Скорее всего, этот объект конфигурации пригодится в других местах.

2 голосов
/ 14 сентября 2011

Измените "http://localhost/main/index.php/city/get_data_by_country" на "/main/index.php/city/get_data_by_country", и оно будет работать независимо от того, какой у вас базовый URL.

Это работает, потому что / перед main/index.php говорит "начните с корня и перейдите в файл index.php в папке main".

Это если ваша корневая папка документа не установлена ​​в папку main, если это так, выньте main

0 голосов
/ 14 сентября 2011

Одна вещь, которую вы можете сделать, это добавить атрибут 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');
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...