PHP 스크립트에서 JSON을 반환하고 싶습니다.
결과 만 반향합니까? Content-Type
헤더 를 설정해야 합니까?
답변
일반적으로 없으면 괜찮지 만 Content-Type 헤더를 설정할 수 있고 설정해야합니다.
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
특정 프레임 워크를 사용하지 않는 경우 일반적으로 일부 요청 매개 변수가 출력 동작을 수정하도록 허용합니다. 일반적으로 빠른 문제 해결을 위해 헤더를 보내지 않거나 데이터 페이로드를 print_r로 눈에 띄게하는 것이 유용 할 수 있습니다 (대부분의 경우 필요하지는 않습니다).
답변
JSON을 반환하는 훌륭하고 명확한 PHP 코드는 다음과 같습니다.
$option = $_GET['option'];
if ( $option == 1 ) {
$data = [ 'a', 'b', 'c' ];
// will encode to JSON array: ["a","b","c"]
// accessed as example in JavaScript like: result[1] (returns "b")
} else {
$data = [ 'name' => 'God', 'age' => -1 ];
// will encode to JSON object: {"name":"God","age":-1}
// accessed as example in JavaScript like: result.name or result['name'] (returns "God")
}
header('Content-type: application/json');
echo json_encode( $data );
답변
메소드 의 매뉴얼에json_encode
따르면 문자열이 아닌 값을 반환 할 수 있습니다 ( false ).
성공 또는
FALSE
실패시 JSON 인코딩 문자열을 반환합니다 .
이 경우 echo json_encode($data)
빈 문자열이 출력되며 이는 유효하지 않은 JSON 입니다.
json_encode
예를 들어 false
인수에 UTF-8이 아닌 문자열이 포함되어 있으면 실패 (및 반환 )됩니다.
이 오류 조건은 다음과 같이 PHP에서 캡처해야합니다.
<?php
header("Content-Type: application/json");
// Collect what you need in the $data variable.
$json = json_encode($data);
if ($json === false) {
// Avoid echo of empty string (which is invalid JSON), and
// JSONify the error message instead:
$json = json_encode(["jsonError" => json_last_error_msg()]);
if ($json === false) {
// This should not happen, but we go all the way now:
$json = '{"jsonError":"unknown"}';
}
// Set HTTP response status code to: 500 - Internal Server Error
http_response_code(500);
}
echo $json;
?>
그런 다음 수신 측은 jsonError 속성 이 존재한다는 것은 오류 조건을 나타내며 그에 따라 처리해야한다는 것을 알아야합니다.
프로덕션 모드에서는 일반적인 오류 상태 만 클라이언트에 보내고 나중에 조사 할 수 있도록보다 구체적인 오류 메시지를 기록하는 것이 좋습니다.
PHP 문서 에서 JSON 오류 처리에 대해 자세히 알아보십시오 .
답변
시도 로 json_encode를 데이터를 인코딩와 콘텐츠 형식을 설정합니다 header('Content-type: application/json');
.
답변
컨텐츠 유형을 설정 한 header('Content-type: application/json');
다음 데이터를 에코하십시오.
답변
또한 액세스 보안을 설정하는 것이 좋습니다. 도달하려는 도메인으로 *를 바꾸십시오.
<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
$response = array();
$response[0] = array(
'id' => '1',
'value1'=> 'value1',
'value2'=> 'value2'
);
echo json_encode($response);
?>
: 여기에 더 많은 샘플입니다 방법 우회 액세스 제어 – 허용 – 원점?
답변
<?php
$data = /** whatever you're serializing **/;
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
?>