2013-03-06 2 views
0

일부 json 데이터를 가져와 사용자가 선택하면 일부 양식 필드를 채우는 작은 ajax 스크립트가 있습니다.Ajax 결과가 개발 및 프로덕션 서버간에 다릅니다.

오늘 아침 개발 서버에서 아약스를 실행했을 때 오류가 발생했음을 알았지 만 제작 측에서는 제대로 작동했습니다. 이 오류는 서버 간의보고 차이로 인해 발생한다고 추측되지만 그 이유는 알 수 없습니다.

데브 PHP 버전 : 5.3.13 생산성 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] 만 설정된 경우) 또는 "undefined variable"($ sec_row가 설정되지 않은 경우) 오류가 발생합니다.

json을 인코딩하기 전에 $ sec_row를 수동으로 설정하여 오류를 로컬에서 해결했지만 프로덕션 서버가 아닌 로컬에서이 작업을 수행해야하는 이유를 이해할 수 없습니다.

이 설정의 원인은 무엇입니까?

답변

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 
); 
+0

아의 예를 얻을! 제안 된 코드에 감사드립니다. 매우 우아! – Barbs

+0

dev 및 prod 서버에 대한 테스트 및 작업 ... 다시 한 번 감사드립니다. – Barbs

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 파일에서 직접 스크립트의 맨 위에 다음을 추가하거나 - 0

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

로 설정 display_errors를 찾거나 이유를 구축 아닌 로 json_encode 사전 즉 항상 만이 당신을 가정 한 $ 결과 1

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 %되지 않을 수도 있습니다,하지만 당신은 아이디어를 물론

관련 문제