jQuery AJAX请求中的相对与绝对URL

时间:2010-03-02 13:52:06

标签: php javascript jquery ajax

我很难让我的AJAX请求在登台服务器上运行。这一切都在我的开发机器上工作正常,但是一上传它,我的所有AJAX请求都停止了工作。我发现,如果我将相对网址(例如“index.php”)更改为绝对网址(“http://example.com/index.php”),请求会再次起作用,但我不明白为什么。

示例请求:

jQuery.post('index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

这不起作用,我甚至没有出现在firebug控制台中。但是调用了成功处理程序,这非常令人困惑。

这很好用:

jQuery.post('http://example.com/index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

有人可以解释为什么AJAX请求会以这种方式运行吗? X_X

4 个答案:

答案 0 :(得分:38)

尝试在第一个示例中在/之前添加index.php,以强制它从root查看。仔细检查以确保您的目录结构完全index.php的位置相同。

答案 1 :(得分:5)

如果您正在使用URL路由,例如在MVC框架中,它将始终相对于执行所执行的页面,该页面不一定与地址栏中的URL匹配。

考虑以下文件结构:

mysite/index.php
mysite/resources/javascript/my_javascript.js
mysite/resources/css/my_css.css

通常,MVC框架通过单个文件路由所有页面请求,例如index.php,(http://www.mysite.com/index.php)。这使得使用相对URL变得容易,因为资源和脚本将始终位于相同的相对路径中。 Javascript将始终位于/ resources / javascript / CSS将始终位于/ resources / css /

无论浏览器地址栏中有什么内容。它可能是:

http://www.mysite.com/index/
http://www.mysite.com/kittens/
http://www.mysite.com/kittens/cute/
http://www.mysite.com/kittens/fluffy/
etc..

答案 2 :(得分:3)

这是一篇很老的帖子,所以很抱歉把它拖出来。但这显然与我的问题有关,而且这是谷歌的最佳结果。

在完成同样的问题后,我确定了答案。

无论您从何处运行脚本,请求的文件都相对于/

例如,在我的文件结构中,我有一个名为js的文件夹。在它下面是我的ajaxProcess.js文件。我试图读取的xml文件位于同一目录中,因此遵循标准规则,将ajax调用的url理解为url:'myfile.xml' 但是,这不起作用。

经过一些游戏后,我将我的xml放入/并再次运行ajax。 Vuala!

还有更多玩法,我发现你从哪里调用js并不重要,它仍然默认为/

我最终将我的xml放在'xml'文件夹中,现在以下的ajax可以在任何地方使用:

$.ajax({
        type:'get',
        dataType: 'xml',
        url: 'xml/class.xml',
        success: function(xml){
            $(xml).find('class').each(function(){
                //code here
            })
        }
    });

答案 3 :(得分:2)

我认为避免此类问题的最佳方法是在HTML的头部为javascripts设置配置文件。您可以在页眉中包含类似的内容:

<script>
        var url = "http:\/\/www.yourdomain.com\/application";
        var path = "\/path\/on\/server\/to root folder";
</script>

另一种方法是将这些变量附加到窗口对象:

 <script>
window.myUrl = "http:\/\/www.yourdomain.com\/application";
...
    </script>

因此,稍后您可以在js文件中使用这些变量:

jQuery.post( url+'/index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });
标题中的

脚本可以根据您的应用配置自动生成,因此在部署应用时,网址和路径变量会相应更改。