Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Ajax结果在开发服务器和生产服务器之间有所不同_Php_Ajax - Fatal编程技术网

Php Ajax结果在开发服务器和生产服务器之间有所不同

Php Ajax结果在开发服务器和生产服务器之间有所不同,php,ajax,Php,Ajax,我有一个小的ajax脚本,当用户做出选择时,它会获取一些json数据并填充一些表单字段 今天早上我注意到,当我在开发服务器上运行ajax时,出现了一个错误,但当运行生产端时,它工作了。我假设这是由于服务器之间的错误报告有所不同,但我不知道为什么 开发人员PHP版本:5.3.13 Prod PHP版本:5.3.16 我跟踪了一些变量的错误,这些变量只有在数据库中出现其他行时才会设置。我正在检索1到3行 第一行被分配给$array1,其他行作为$sec_行[0]和$sec_行[1]进入它们自己的数组

我有一个小的ajax脚本,当用户做出选择时,它会获取一些json数据并填充一些表单字段

今天早上我注意到,当我在开发服务器上运行ajax时,出现了一个错误,但当运行生产端时,它工作了。我假设这是由于服务器之间的错误报告有所不同,但我不知道为什么

开发人员PHP版本:5.3.13 Prod PHP版本:5.3.16

我跟踪了一些变量的错误,这些变量只有在数据库中出现其他行时才会设置。我正在检索1到3行

第一行被分配给$array1,其他行作为$sec_行[0]和$sec_行[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_行

在实时站点上,当未定义$sec_行时,ajax会将result2和result3返回为NULL。但在本地主机上的开发服务器上,它会给我一个“未定义索引”(如果只设置了$sec_行[0])或“未定义变量”(如果未设置$sec_行)错误

我已经通过在编码json之前手动设置$sec_行在本地修复了这个错误,但我不明白为什么我需要在本地而不是在生产服务器上这样做


什么设置可能导致这个问题?

因为您可能有“代码> DePrasyOrror < /Cube >打开,因此它将在JSON的中间生成未定义的索引错误,使得JSON中不能解析的JSON无效。

除了修复错误之外,最简单的方法是关闭错误报告。但是您应该通过检查是否设置了索引,然后输出值,或者
null
来修复错误

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

事实上,我会尝试纠正错误,而不是简单地忽略它。。。尝试这样做:

$result=array('result1'=>$array1);
如果(isset($sec_row[0]))
$result['result2']=$sec_行[0];
如果(isset($sec_row[1]))
$result['result3']=$sec_行[1];
echo json_编码($result);

这与服务器上的错误报告级别有关 因此,要么关闭它们(将以下内容添加到脚本顶部),要么直接在php.ini中(如果您有访问权限)查找display_错误,设置为0

error_reporting(0);
@ini_set('display_errors', 0);
或者为什么不事先构建json_编码 即 假设您始终只有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);
for($x=0;$x$array1,$more\u json);

我还没有测试过这个,所以语法可能不是100%,但你明白了

啊,当然!谢谢你推荐的代码。非常优雅!