問題描述
我通過 jQuery AJAX 向 PHP 腳本發佈一些數據,一切都正常執行,但它返回 404 錯誤。在我的 Firebug 控制枱中,PHP 腳本的響應是正確的。我不明白腳本如何響應,它仍然拋出 404 錯誤。 jQuery “error” 回調方法觸發,”success” 方法沒有。
PHP 腳本執行的所有語句都能準確地工作,因為我可以看到正在更新的數據庫等。
我在 Dreamhost 託管的 WordPress 3.x 網站上使用 jQuery 1.4.2 。
– – – – – -更多信息 – – – – – –
好的,我已經弄清楚,當我在 Ajax 腳本中包含 WordPress 的 wp-blog-header.php 文件時,我收到錯誤。此外,一次這些腳本工作,我有 90%確定他們在 WP 3.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
來自 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,因為我相信它是實際的工作,創建您想要訪問的對象。
再次,我實際上並沒有使用 WordPress,所以我不能肯定,但是看源代碼這似乎是最可能的情況,從我能説的。
次佳解決辦法
我已經在 WordPress 模板中添加了一個 ajax.php 文件,並出現了這個問題。
我通過在 ajax.php 的頂部添加來解決它
header('Response: HTTP/1.1 200 OK');
一種黑客,但它的工作。
第三種解決辦法
沒有人發表這個答案,所以值得一提。您應該包括 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' );
}
如果您只輸出 json 進行 AJAX 操作,則不需要包含 template-loader.php 。這將產生不必要的開銷,然後當然提供 404 錯誤。
此’workaround’ 是當前和未來版本的 WordPress 所必需的。我假設任何 3.0 以前應該包括 wp-load.php 如所述。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。