首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery AJAX请求中的相对urls与绝对urls

jQuery AJAX请求中的相对urls与绝对urls
EN

Stack Overflow用户
提问于 2010-03-02 21:52:06
回答 3查看 66.9K关注 0票数 25

我很难让我的AJAX请求在临时服务器上工作。它在我的开发机器上运行得很好,但是一旦我上传了它,我所有的AJAX请求就停止工作了。我发现,如果我更改相对urls (例如,"index.php")到绝对urls ("http://example.com/index.php")请求再次工作,但我不明白为什么。

请求示例:

代码语言:javascript
复制
jQuery.post('index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

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

这个很好用:

代码语言:javascript
复制
jQuery.post('http://example.com/index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

有人能解释一下为什么AJAX请求会这样吗?x_X

EN

回答 3

Stack Overflow用户

发布于 2012-11-08 05:03:58

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

考虑以下文件结构:

代码语言:javascript
复制
mysite/index.php
mysite/resources/javascript/my_javascript.js
mysite/resources/css/my_css.css

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

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

代码语言:javascript
复制
http://www.mysite.com/index/
http://www.mysite.com/kittens/
http://www.mysite.com/kittens/cute/
http://www.mysite.com/kittens/fluffy/
etc..
票数 5
EN

Stack Overflow用户

发布于 2011-06-15 02:59:42

这是一个旧的帖子,所以我很抱歉把它拖出来。但这显然与我的问题有关,在谷歌上排名靠前。

在对完全相同的问题进行了一些实验之后,我确定了答案。

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

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

经过一番尝试之后,我将xml放在/中,然后再次运行ajax。哇啦!

更多的尝试,我发现从哪里调用js根本不重要,它仍然默认为/

我最终将我的xml放在一个'xml‘文件夹中,现在以下ajax可以在任何地方工作:

代码语言:javascript
复制
$.ajax({
        type:'get',
        dataType: 'xml',
        url: 'xml/class.xml',
        success: function(xml){
            $(xml).find('class').each(function(){
                //code here
            })
        }
    });
票数 3
EN

Stack Overflow用户

发布于 2013-11-10 02:55:07

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

代码语言:javascript
复制
<script>
        var url = "http:\/\/www.yourdomain.com\/application";
        var path = "\/path\/on\/server\/to root folder";
</script>

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

代码语言:javascript
复制
 <script>
window.myUrl = "http:\/\/www.yourdomain.com\/application";
...
    </script>

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

代码语言:javascript
复制
jQuery.post( url+'/index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });

头文件中的脚本可以根据你的应用程序配置自动生成,因此当应用程序部署时,url和path变量会相应地更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2363511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档