[英]Jquery AJAX POST is returning ERROR 500 - Google Text to Speech Module
[英]jQuery - Ajax returning error 500 on some posts
我有一些Ajax一直在現場工作,現在它已停止工作。 Ajax應該返回一個頁面,但返回500錯誤(內部服務器錯誤) 。
奇怪的是我可以導航並發布到Ajax正在調用的頁面,因此頁面只能通過Ajax調用($ .post)工作。
另一個奇怪的事情是它在當地工作正常,但不是活着。 此外,該網站上的所有其他Ajax都在工作。
這有什么可能是最模糊的? 順便說一下,它是CakePHP的所有jQuery。
編輯 :
apache錯誤日志說:“腳本標題過早結束:php-script,referer ......”
編輯2 :
這一切都發生在我將服務器切換到SSL時。 它說上面的錯誤,然后是“端口80”。
首先,這與jQuery,AJAX,POST,CakePHP或HTTP標頭無關。 完整的錯誤消息是“腳本過早結束”,這意味着Apache用於運行PHP腳本的PHP進程意外終止(即,在PHP進程完成其部分Fast CGI協議之前)。 這通常意味着PHP進程崩潰或導致“分段錯誤”。
PHP分段錯誤可能很難排除故障,它們永遠不會發生; PHP永遠不會崩潰。 崩潰的原因可能是由於許多事情。 也許這是一個簡單的修復。
我要做的第一件事是完全卸載PHP並安裝最新的穩定版本。 如果您運行的是PHP 5.3和Windows,那么您應該只使用VC6二進制文件(“VC6 x86 Thread Safe”軟件包); 當使用Apache時,VC9包將導致PHP崩潰。 重新安裝可能會解決您的問題,因為較舊版本的PHP的擴展DLL / SO可能仍然存在於實時服務器上的擴展目錄中。
如果在Windows上並使用MySQL,我要做的下一件事就是確保MySQL bin
目錄位於實時服務器的Path
。 這樣做的原因是為了確保操作系統“找到” libmySQL.dll
。 您應該能夠SSH到實時服務器,鍵入mysql --help
,並查看MySQL CLI客戶端的用法消息。 如果將MySQL bin
目錄添加到Path
重新啟動Apache。
如果這兩個建議都無法解決問題,請通過以下答案更新您的問題:
dl
? 更新:對於5.3.6及更高版本,PHP項目不再釋放“VC6”安裝程序。 建議從Apache Lounge安裝Apache HTTPD版本並使用“VC9”安裝程序。
檢查你的apache和php error logs
! 它會在那里
導致此問題的最常見原因是腳本在將完整的標頭集(或可能任何標頭)發送到服務器之前死亡。 要查看是否是這種情況,請嘗試從交互式會話中獨立運行腳本,而不是作為服務器下的腳本運行。 如果收到錯誤消息,這幾乎肯定是“腳本頭過早結束”消息的原因。 即使CGI從命令行運行正常,請記住在Web服務器下運行時環境和權限可能不同。 CGI只能訪問Apache配置中指定的用戶和組所允許的資源。 此外,環境與命令行中提供的環境不同,但可以使用mod_env提供的指令進行調整。
第二個最常見的原因(除了人們根本沒有輸出所需的標題)是與Perl的輸出緩沖交互的結果。 要在每個輸出語句之后使Perl刷新其緩沖區,請在發送HTTP標頭的print或write語句周圍插入以下語句:
{
local ($oldbar) = $|;
$cfh = select (STDOUT);
$| = 1;
#
# print your HTTP headers here
#
$| = $oldbar;
select ($cfh);
}
這通常僅在從腳本調用將輸出發送到stdout的外部程序時,或者在發送標頭和開始發送實際內容之間會有很長的延遲時才需要。 為了最大限度地提高性能,您應該在發送標頭的語句之后關閉緩沖區刷新(使用$ | = 0或等效項),如上所示。
如果您的腳本不是用Perl編寫的,那么對於您使用的任何語言都要做同等的事情(例如,對於C,在編寫標題后調用fflush())。
“腳本標頭過早結束”消息的另一個原因是RLimitCPU和RLimitMEM指令。 如果CGI腳本因資源限制而被終止,您可能會收到消息。
此外,suEXEC,mod_perl或其他第三方模塊中的配置問題通常會干擾CGI的執行並導致“腳本標頭過早結束”消息。
CPHP:
摘自http://henrik.nyh.se/2007/04/premature-end-of-script-headers-for-cgi-can-be-directory-permissions
除了Apache FAQ中列出的原因之外,CGI腳本的錯誤日志消息“腳本頭的過早結束”(在我的例子中是Dreamhost上的Ruby腳本)也可能意味着包含該腳本的目錄是全局可寫的。
因此像drwxr-xrwx這樣的文件夾權限可能會導致此錯誤。 chmod 755 mydir會將這些權限更改為drwxr-xr-x,一切都很好。
我想Apache / suEXEC在運行任何惡意用戶可以編輯的東西時會遇到問題。
值得檢查目錄權限。
在單獨的說明中,您說在更改站點以使用SSL時出現問題,但是錯誤提到端口80.端口80用於標准HTTP流量,但端口443用於SSL流量 - 如果流量通過端口80可能存在服務器配置錯誤,應該存在HTTPS的HTTP或證書問題。 我看到證書過期時會發生類似的錯誤。 使用SSL的URL(調用頁面和腳本)都是?
您應該檢查php error.log,在我的情況下,我已經使用redis設置了緩存類型,但它無法正常工作。
您可以使用Fidler檢查服務器在$ .post期間返回的內容。 如果您直接在瀏覽器中運行相同的方法,它將包含將被返回的網頁。
這個錯誤有點問題,因為它可能是由很多東西引起的。
你的頁面在做什么......? 以下是一些建議。
如果您的頁面就像一個自動完成的頁面,那么您傳遞一些信息並獲得結果的篩選列表...也許您的AJAX腳本沒有傳回數據項,而您的頁面正在嘗試返回所有內容。 真正龐大的PHP腳本(即密集/遞歸操作)可能會導致此錯誤。
處理這個特定錯誤的正常建議是去掉一個穩定的頁面,然后重新開始添加東西 - 所以也許把你的AJAX腳本指向一個有這個的頁面......
<?php
echo 'If this appears, we\'re stable!';
?>
然后逐漸添加代碼塊,直到遇到問題。 我建議的本頁第2版將是......
<?php
print_r($_POST);
?>
因為這將允許您檢查表單帖子中的內容。
如果不能滿足以上所有要求,請提供以下信息......
1)PHP頁面的功能描述,或者代碼示例。 2)調用PHP頁面的JavaScript代碼。
也許生產站點違反了相同的原始政策 。
瀏覽器中的URL到第三個斜杠,必須與AJAX POST中的URL完全匹配,否則Javascript的瀏覽器安全性約束將拒絕響應。 服務器實際上可以看到請求並正確響應,但瀏覽器將空字符串交回給AJAX調用。
我想把我的2美分投入,但它來自一個稍微不同的方向,你可能有或沒有直接的資源進行故障排除 - 但值得考慮。
但一般來說,這是一個PHP錯誤,我們可以排除客戶端問題。 最重要的是,在我的日常工作(網絡故障排除)中,如果有什么工作然后停止,我會立即想到“改變了什么”。 如果您沒有向腳本添加任何內容,並且用戶無法在運行時影響腳本,那么我會立即開始思考“呃 - 哦,基礎設施是什么”。 如果某些東西在本地工作,但不在互聯網上,則尤其如此。
您是否檢查過服務器上的內存不良或網卡壞(如果網卡壞了,這可以解釋為什么它可以在一個接口而不是另一個接口上工作)。 您是否可以訪問此主機或托管主機(您的主機可以檢查)嗎?
接下來我會開始思考,好吧,服務器內存很好,並且它不太可能與NIC有關,否則會在不同的地方失敗。 但仍然可以建立網絡。 是否有一個安全設備可以在混合中的任何地方破壞數據包(NIDS / HIDS,WAF,代理等?)您是否看到數據包的任何網絡問題(重復,亂序,不碎片等等)。
老實說,如果有人給我打電話並向我描述了你的問題,我首先要說的是“檢查IPS日志”大約85%就是問題。 誤報可以做到這一點,只需要在防火牆上進行一次自動更新......
我希望有所幫助。
我也有這個問題,在我的情況下解決方案是用干凈的文件替換php.ini文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.