【问题标题】:Broken relative Url in jQuery getJSON Ajax MethodjQuery getJSON Ajax 方法中的相关 URL 损坏
【发布时间】:2017-06-15 00:58:15
【问题描述】:

我的开发环境的 URL 是:

http://localhost/mysite/blah...

我正在使用 jQuery 和 getJSON 在我的网站上执行一些 ajax 操作,这些操作在我将 url 指定为:

/mysite/controller/action

..但这并不理想,因为我不想将我的开发 url 硬编码到我单独的 jQuery 包含文件中。

当网站上线时,将 controller/action 或 /controller/action 作为 url 会很好,因为这样可以解决问题,但对于开发网站来说,这是不行的。

我试过了:

controller/action

..但这会返回 404,这让我很吃惊,因为我认为 url 前面缺少 / 会阻止查看网站根目录。

必须有一个巧妙的解决方案?

【问题讨论】:

    标签: url jquery getjson


    【解决方案1】:

    我会通过在我的 HTML 标头中插入一个全局常量来做到这一点:

    <script type="text/javascript">
      var BASE_URL = '/mysite/';
    </script>
    

    这将从您的服务器插入,因此可以动态更改。 稍后在您的脚本中,您将能够使用(此处为 jQuery 样式)发出 AJAX 请求:

    $.ajax( BASE_URL + '/controller/action', ...);
    

    【讨论】:

      【解决方案2】:

      如果你在

      /mysite/controller/action
      

      然后是正确的相对路径

      /mysite/some_other_controller/some_other_action 
      

      ../../some_other_controller/some_other/action
      

      【讨论】:

      • 不幸的是,它并不总是会从同一路径调用,因此虽然 ../../ 在某些领域可以工作 - 但在其他领域会失败。
      【解决方案3】:

      您可以使用此代码获取 .js 脚本的当前路径,并使用它来计算您的相对路径。

      var url;
      $("script").each(function () {
             if ($(this).attr("src").indexOf("[YOUR_SCRIPT_NAME.JS]") > 0) {
                      url = $(this).attr("src");
                      url = url.substr(0, url.lastIndexOf("/"));
                      return false;
             }
      });
      var final_url = url + "/your_target_script.js"
      

      将 YOUR_SCRIPT_NAME 替换为脚本的唯一名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2011-02-05
        • 1970-01-01
        • 2010-09-23
        • 2010-11-07
        相关资源
        最近更新 更多