2013-03-06 104 views
0

我有一個小的ajax腳本,它可以在用戶做出選擇時獲取一些json數據並填充一些表單域。Ajax結果在開發和生產服務器之間有所不同

今天早上我注意到,當我在開發服務器上運行ajax時發生錯誤,但運行生產端時發生錯誤。我假設這是由於服務器之間的錯誤報告有所不同,但我無法弄清楚原因。

開發PHP版本:5.3.13 PROD PHP版本:5.3.16

我已經跟蹤誤差一些變量,如果其他行凸輪從數據庫中是隻設置。我正在檢索1行和3行之間。

第一行被分配給$ array1,並且額外的行作爲$ sec_row [0]和$ sec_row [1]進入它們自己的數組。

$array1 = ('Name'=>'George','Address'=>'52 Smith St',....etc); 
$sec_row[0] = ('Alias1'=>'Jorge','Location'=>'SimCity',....etc); 

echo json_encode(array('result1'=>$array1,'result2'=>$sec_row[0],'result3'=>$sec_row[1]); 

注意只有在找到其他結果時才設置$ sec_row。

在$ sec_row未定義的實時站點上,ajax將result2和result3作爲NULL返回。但是在我的本地主機上的開發服務器上,它給了我一個「未定義索引」(如果只設置了$ sec_row [0])或者「未定義變量」(如果沒有設置$ sec_row)錯誤。

我已經通過編碼JSON之前手動設置$ sec_row本地固定的錯誤,但我不明白爲什麼我需要在本地卻沒有做到這一點在生產服務器上。

任何建議,哪些設置可能導致此?

回答

1

因爲你可能已經打開display_errors所以它會在JSON中間生成未定義的索引錯誤,使得JSON無法在JS端解析。

最簡單的事情做的比修正這個錯誤是另一把使用error_reporting關閉。但是,您應該通過檢查索引是否已設置然後輸出值來修復錯誤,或者null

json_encode(array(
    'result1'=>$array1, 
    'result2'=>isset($sec_row[0]) ? $sec_row[0] : null, 
    'result3'=> isset($sec_row[1]) ? $sec_row[1] : null 
); 
+0

是啊!並感謝您的建議代碼。十分優雅! – Barbs 2013-03-06 00:20:49

+0

測試和重新致力於開發和生產線的服務器...謝謝。 – Barbs 2013-03-06 01:04:44

0

其實,我想嘗試的根本無視其改正錯誤,而不是...試着做這樣的事情:

$result = array('result1' => $array1); 
if (isset($sec_row[0])) 
    $result['result2'] = $sec_row[0]; 
if (isset($sec_row[1])) 
    $result['result3'] = $sec_row[1]; 
echo json_encode($result); 
0

它做的的error_reporting級別的服務器 就這麼無論是將其關閉 - 添加以下到腳本的頂部,或直接在php.ini,如果你有機會獲得它 - 尋找的display_errors,設置爲0

error_reporting(0); 
@ini_set('display_errors', 0); 

或者爲什麼不建立自己的json_encode事先 即 假設你總是隻有1 $ RESULT1

for($x = 0; $x <= count($sec_row); $x++) { 
    $more_json .= "'result'".$x+2 ."=> ".$sec_row[$x]."," 
} 
# strip the last comma off 
$more_json = rtrim($more_json ,','); 
echo json_encode(array('result1'=>$array1, $more_json); 

我沒有測試過這一點,所以語法可能不是100%,但你的想法當然

相關問題