Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery Ajax返回404错误,但响应正确_Jquery_Ajax_Wordpress - Fatal编程技术网

jQuery Ajax返回404错误,但响应正确

jQuery Ajax返回404错误,但响应正确,jquery,ajax,wordpress,Jquery,Ajax,Wordpress,我通过jQueryAjax将一些数据发布到PHP脚本中,所有内容都正确执行,但返回404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不明白脚本如何响应,它仍然抛出404错误。jQuery“error”回调方法会触发,而“success”方法不会触发 PHP脚本执行的所有语句都能准确地工作,因为我可以看到数据库正在更新,等等 我正在Dreamhost托管的WordPress 3.x网站上使用jQuery1.4.2 ------更多信息------------ 好的,我发现当我在

我通过jQueryAjax将一些数据发布到PHP脚本中,所有内容都正确执行,但返回404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不明白脚本如何响应,它仍然抛出404错误。jQuery“error”回调方法会触发,而“success”方法不会触发

PHP脚本执行的所有语句都能准确地工作,因为我可以看到数据库正在更新,等等

我正在Dreamhost托管的WordPress 3.x网站上使用jQuery1.4.2

------更多信息------------

好的,我发现当我在Ajax脚本中包含WordPress的
wp blog header.php
文件时,会出现错误。此外,以前这些脚本可以工作,我90%确信它们在WP3.0更新后停止工作。我将粘贴Firebug的响应标题

此来自PHP的标头响应包含wp-blog-header.PHP,并在Firebug中返回404错误…

Date                Tue, 10 Aug 2010 01:44:44 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
X-Pingback        http://www.learnwake.com/xmlrpc.php
Expires          Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control       no-cache, must-revalidate, max-age=0
Pragma            no-cache
Last-Modified       Tue, 10 Aug 2010 01:44:44 GMT
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=98
Connection        Keep-Alive
Content-Type        text/html; charset=UTF-8
Date                Tue, 10 Aug 2010 01:44:58 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=100
Connection        Keep-Alive
Content-Type        text/html
此来自PHP的标头响应不包括wp-blog-header.PHP,并在Firebug中返回200 OK…

Date                Tue, 10 Aug 2010 01:44:44 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
X-Pingback        http://www.learnwake.com/xmlrpc.php
Expires          Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control       no-cache, must-revalidate, max-age=0
Pragma            no-cache
Last-Modified       Tue, 10 Aug 2010 01:44:44 GMT
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=98
Connection        Keep-Alive
Content-Type        text/html; charset=UTF-8
Date                Tue, 10 Aug 2010 01:44:58 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=100
Connection        Keep-Alive
Content-Type        text/html

我曾经在WordPress模板中添加过一个
ajax.php
文件,但遇到了这个问题

我只需在
ajax.php

header('Response: HTTP/1.1 200 OK');

有点像黑客,但它成功了。

总的来说,WordPress不会在很多地方返回404。我建议对这些地方的源代码树进行灰显,并放置一些调试代码来跟踪它发生的原因。

当您包含
wp blog header.php
时,您将启动整个WordPress安装例程。调用函数
wp()
,该函数调用
$wp->main()
,然后调用各种设置函数

其中一个是
$wp->query\u posts()
,它调用
$wp\u查询()
,然后调用
wp\u query
parse\u query()函数。我怀疑404指示是在那里生成的(您的AJAX页面不是WP post或类似的东西),然后通过
$WP->handle_404()
,在
main()
中的
query_posts()
之后调用的函数,转换为实际的404响应头

我不能百分之百确定
parse_query()
是罪魁祸首,但我建议您看看是否可以只包含
wp load.php
,因为我相信它确实可以创建您想要访问的对象


再说一次,我实际上并没有使用WordPress,所以我不能确定,但从源代码来看,这似乎是最有可能的情况。根据Tim的回答,我将插件中捕获的钩子从“wp”改为“init”,它不再给我404

我也有同样的问题

修正

更改:

require_once('wp-blog-header.php');
致:


如果您希望在WP之外有一个页面,这也将修复HTTP头错误。

没有其他人将此作为答案发布,因此值得注意。您应该包括
wp load.php
,而不是
wp blog header.php

如果打开
wp blog header.php
,您将看到原因:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}
如果只为AJAX操作输出json,则不需要包含
模板加载器.php
。这将产生不必要的开销,然后当然会产生404错误


这种“变通方法”对于当前和未来版本的WordPress是必要的。我假设任何超过3.0的内容都应该包括所述的
wp load.php

请检查php脚本,如果有一行内容发送头404,您应该将这个新发现编辑到原始问题中。@alex-刚刚做了。感谢您的输入/建议。我将其放在PHP脚本的顶部和底部,但没有帮助。它应该在您包含
wp header.PHP
,IIRC.Yup,try之后。还是不行。终于解决了。谢谢你的时间和耐心!提姆。我太爱你了,你都不知道。这件事困扰了我一段时间。将include更改为wp-load.php使情况有所不同。所以,在一天结束时,我认为是WordPress升级导致了这个问题。是的,我希望早点发现这个问题。谢谢蒂姆!“我实际上不使用wordpress”我使用,很明显你比我知道的更多…你太棒了!!蒂姆和迈克,爱你们两个!:)当我找到你的答案时,我刚刚开始调试这个问题。这肯定需要一些时间,我已经走到了死胡同你的答案是完全正确的,对我来说很有用,非常感谢!