我很难让我的AJAX请求在临时服务器上工作。它在我的开发机器上运行得很好,但是一旦我上传了它,我所有的AJAX请求就停止工作了。我发现,如果我更改相对urls (例如,"index.php")到绝对urls ("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
发布于 2012-11-08 05:03:58
如果您正在使用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 )。这使得相对urls的使用变得很容易,因为资源和脚本始终位于相同的相对路径中。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..
发布于 2011-06-15 02:59:42
这是一个旧的帖子,所以我很抱歉把它拖出来。但这显然与我的问题有关,在谷歌上排名靠前。
在对完全相同的问题进行了一些实验之后,我确定了答案。
无论您从何处运行脚本,所请求的文件都是相对于/
例如,在我的文件结构中,有一个名为js的文件夹。它下面是我的ajaxProcess.js文件。我试图读取的xml文件位于同一目录中,因此按照标准规则,ajax调用的url应该是url:'myfile.xml‘,但这并不起作用。
经过一番尝试之后,我将xml放在/中,然后再次运行ajax。哇啦!
更多的尝试,我发现从哪里调用js根本不重要,它仍然默认为/
我最终将我的xml放在一个'xml‘文件夹中,现在以下ajax可以在任何地方工作:
$.ajax({
type:'get',
dataType: 'xml',
url: 'xml/class.xml',
success: function(xml){
$(xml).find('class').each(function(){
//code here
})
}
});
发布于 2013-11-10 02:55:07
我认为避免这种问题的最好方法是在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 });
头文件中的脚本可以根据你的应用程序配置自动生成,因此当应用程序部署时,url和path变量会相应地更改。
https://stackoverflow.com/questions/2363511
复制相似问题