【问题标题】:how not to hard-code codeigniter link in js file如何不在 js 文件中对 codeigniter 链接进行硬编码
【发布时间】:2011-09-14 11:20:32
【问题描述】:

我编写了下面的例程,为我的 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文件,我不再能够使用该函数。

【问题讨论】:

    标签: javascript jquery codeigniter


    【解决方案1】:

    (大部分)取自我在 How to get relative path in Javascript? 上的回答。

    你有两个选择:

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

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

      然后在 AJAX url 前面加上 config.base。

      您必须将配置对象放在 PHP 解析的位置;标准选项在&lt;head&gt; HTML 元素内。不用担心它是一个小的配置对象,它的内容可以在每个页面上更改,因此完全可以将其粘贴在其中。

    2. 使用&lt;base /&gt; HTML 标记为所有相对 URL 设置 URL 前缀。这会影响所有相对 URL:图片、链接等。

    就个人而言,我会选择选项 1。您很可能会发现该配置对象在其他地方派上用场。

    【讨论】:

    • 我忘了回来选择你的答案。我选择了选项 2,因为我认为 base_url() 不适用于 .js 文件。谢谢。
    • 选项1更好,它不是js文件而是PHP文件。
    【解决方案2】:

    将"http://localhost/main/index.php/city/get_data_by_country" 更改为"/main/index.php/city/get_data_by_country",无论您的基本网址是什么,它都会起作用。

    这是因为main/index.php 之前的/ 表示“从根目录开始,然后转到main 文件夹中的index.php 文件”。

    这是除非你的文档根文件夹设置为main文件夹,如果是,取出main

    【讨论】:

    • 不会将/index.php 链接到http://localhost/index.php,而不是http://localhost/main/index.php?
    • 是的,错过了主文件夹部分。已更新。
    【解决方案3】:

    您可以做的一件事是向页面上的元素添加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');
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2020-12-13
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多