我通过jQuery AJAX发布一些数据到PHP脚本,一切执行正确,但它返回一个404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不明白脚本如何响应,它仍然引发404错误。 jQuery“错误”回调方法触发器,而“成功”方法不会。
由PHP脚本执行的所有语句都准确地工作,因为我可以看到正在更新的数据库等。
我使用jQuery 1.4.2,在由Dreamhost托管的wordpress 3.x网站。
– – – – – -更多信息 – – – – – –
OK,我已经知道,当我包括wordpress的wp-blog-header.PHP文件在Ajax脚本,我得到的错误。此外,一次一次这些脚本工作,我90%肯定他们在WP 3.0更新后停止工作。我将粘贴在Firebug的响应头中。
这个标题响应从PHP,包括wp-blog-header.PHP并返回一个404错误在Firebug …
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
来自PHP的此标头响应不包括wp-blog-header.PHP并在Firebug中返回200 OK …
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
解决方法
当你包括wp-blog-header.PHP时,你最终会引导整个wordpress安装程序。调用函数wp(),它调用$ wp-> main(),然后调用各种设置函数。
其中之一是$ wp-> query_posts(),它调用$ wp_the_query-> query(),它又调用WP_Query的parse_query()函数。我怀疑404指示是在那里生成的(你的AJAX页面不是一个WP帖子或任何类似的东西),然后通过$ wp-> handle_404()转换为实际的404响应头,函数调用后的query_posts()在main()。
我不是100%确定parse_query()是确定的罪魁祸首,但我建议看看,如果你可以只包括wp-load.PHP而不是,因为我相信它做实际的工作,创建你想访问的对象。