为啥即使文件存在于服务器上,jQuery ajax 也会返回 404 Not found 错误?

Posted

技术标签:

【中文标题】为啥即使文件存在于服务器上,jQuery ajax 也会返回 404 Not found 错误?【英文标题】:Why is jQuery ajax get returning a 404 Not found error even while the file exists on the server?为什么即使文件存在于服务器上,jQuery ajax 也会返回 404 Not found 错误? 【发布时间】:2013-07-07 21:07:10 【问题描述】:

当我通过浏览器访问以下网址时,它可以正常返回 JSON 数据,

http://azcvoices.com/topcompanies/wp-content/themes/topcompanies/get.php?p=33

当 jquery 执行 ajax get 时,即使文件 get.php 如上所述确实存在于服务器上,它也会失败并使用以下代码生成 404 Not found error

$.ajax( 

    url: "http://azcvoices.com/topcompanies/wp-content/themes/topcompanies/get.php",
    type: "GET",
    data: p: postId
)
.done(function(post) 
)
.fail(function()  alert("error"); )
.always(function()   );

您可能会看到下面的 404 错误,

目前 .htaccess 包含以下内容,

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

这会导致问题吗?

测试服务器上的相同演示, http://peplamb.com/workspace/azcentral.com/spotlight-stories/ 工作正常,但相同的代码在 http://azcvoices.com/topcompanies/spotlight-stories/

失败

可能是什么问题?非常感谢任何帮助!

【问题讨论】:

当我在浏览器中访问该链接时,我得到一个 404... 你能再试一次吗?我正在测试一些东西! 【参考方案1】:

您是否从与托管页面相同的域发出请求?如果没有,您可能会遇到Cross-Origin Resource Sharing 的问题。

要解决此问题,您可以将Access-Control-Allow-Origin: * 添加为标题。

【讨论】:

我认为它没有生效。当我获取页面时,我没有在标题中看到它。编辑-没关系,现在似乎可以工作了。 嗨,马特,感谢您的快速响应,我添加了 header("Access-Control-Allow-Origin: *"); get.php 文件也继续进行并将 AddType application/json .json 添加到 .htaccess 文件中,但结果仍然相同,知道为什么吗? 现在可以在标题中看到了吗? 让我们continue this discussion in chat 感谢马特的提示! header('HTTP/1.1 200 OK', true, 200);成功了!

以上是关于为啥即使文件存在于服务器上,jQuery ajax 也会返回 404 Not found 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥jquery的ajax事件不支持谷歌浏览器

为啥即使包含所有脚本引用,我的 jQuery-UI 对话框也不起作用?

为啥 Ajax.BeginForm 不存在?

Ajax 加载面板适用于 FF,但不适用于 Chrome。知道为啥吗?

jQuery - 在 AJAX 调用之后,旧元素仍然存在于 DOM 中吗?如何去除?

为啥我的 AJAX 方法将表单输入发送到 URL?