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

2022-08-30 16:29:07

我很难让我的AJAX请求在暂存服务器上工作。这在我的开发机器上工作正常,但是一旦我上传它,我所有的AJAX请求就停止工作了。我发现,如果我改变相对网址(例如。“index.php”)到绝对url(“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


答案 1

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


答案 2

如果您使用的是 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..