我有一个小的ajax脚本,它可以获取一些json数据并在用户进行选择时填充一些表单字段。
我今天早上注意到,当我在开发服务器上运行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将result2和result3返回为NULL。但是在我的localhost上的开发服务器上,它给了我一个“未定义的索引”(如果只设置了$ sec_row [0])或“未定义的变量”(如果没有设置$ sec_row)错误。
我通过在编码json之前手动设置$ sec_row来本地修复错误但我不明白为什么我需要在本地执行此操作但不在生产服务器上执行此操作。
有关设置可能导致此问题的任何建议吗?
答案 0 :(得分: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
);
答案 1 :(得分: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);
答案 2 :(得分: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%,但是你明白了