我很难让我的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
答案 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 });
标题中的脚本可以根据您的应用配置自动生成,因此在部署应用时,网址和路径变量会相应更改。