2012-01-18 58 views
0

所以我使用cakephp和使用Ajax提交表單。在某些情況下,它返回一個自定義錯誤。我的自定義HTTP錯誤消息越來越覆蓋在php

例如,在一個點上也可以是這樣的:

Failed to load resource: the server responded with a status of 412 
([{"field":"PaymentCardholderName","message":"Please enter CardHolder's Name."}, 
{"field":"PaymentCardNumber","message":"Please enter Card Number."}, 
{"field":"PaymentCvvNumber","message":"Please enter CVV Number."}, 
{"field":"PaymentBillingAddress","message":"Please enter your Billing Address"}]) 

這裏是萬一有人需要它

header('HTTP/1.1 412 ' . json_encode($error)); 

當我打開這件事在當地看到我的自定義錯誤的服務器邏輯信息。當我把它部署到遠程服務器我只是看到我的自定義錯誤信息覆蓋

Failed to load resource: the server responded with a status of 412 
(Precondition Failed) 

它必須是一些配置,但我不能找到它。

+4

爲什麼在*地球*上你會把這樣的數據放在響應行中?把它放在響應的主體中('echo')--HTTP不*被設計爲以你試圖使用它的方式工作。 – DaveRandom 2012-01-18 10:12:39

+0

@DaveRandom感謝您的迴應。我試圖觸發一個jQuery Ajax錯誤。你可以幫我解決這個問題。我如何在這種情況下發送錯誤 – aWebDeveloper 2012-01-18 11:02:44

+0

請將請求的jQ代碼添加到您的問題中,以便我們可以用正確的代碼 – DaveRandom 2012-01-18 16:30:51

回答

1

另外,除了假設HTTP/1.1

這樣做:

header($_SERVER["SERVER_PROTOCOL"]." 412 Precondition Failed"); 

取而代之的是:

header("HTTP/1.1 412 Precondition Failed"); 
header("HTTP/1.0 412 Precondition Failed"); 

爲什麼?因爲$_SERVER["SERVER_PROTOCOL"]會根據您的瀏覽器爲您提供HTTP/1.1HTTP/1.0。如果使用錯誤的,apache可能會向響應添加意外內容。例如。開始時的4位十六進制代碼(校驗和?)和結尾零。

+1

來幫助您。最重要的是,絕對不應該依賴狀態行。它的目的只是一個可讀的字符串。代碼只應該看代碼。 – Evert 2012-01-18 13:24:46