0

ユーザーが選択したときにいくつかのjsonデータを取得し、いくつかのフォームフィールドに入力する小さなajaxスクリプトがあります。

今朝、開発サーバーで ajax を実行したときにエラーが発生したことに気付きましたが、運用側で実行すると機能しました。これは、サーバー間のエラー報告の違いによるものだと推測していますが、その理由はわかりません。

Dev 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 は結果 2 と結果 3 を NULL として返します。しかし、ローカルホストの開発サーバーでは、「未定義のインデックス」($sec_row[0] のみが設定されている場合) または「未定義の変数」($sec_row がどちらも設定されていない場合) エラーが表示されます。

json をエンコードする前に $sec_row を手動で設定してローカルでエラーを修正しましたが、実稼働サーバーではなくローカルでこれを行う必要がある理由がわかりません。

どの設定がこれを引き起こす可能性があるかについての提案はありますか?

4

3 に答える 3

1

おそらくdisplay_errorsオンになっているため、JSON の途中で未定義のインデックス エラーが生成され、JS 側で解析できない無効な JSON になります。

エラーを修正する以外に最も簡単な方法は、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
);
于 2013-03-06T00:14:47.440 に答える
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);
于 2013-03-06T00:16:59.813 に答える
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% ではないかもしれませんが、アイデアはわかります

于 2013-03-06T00:18:26.923 に答える