php와 js가 json을 통해 서로 데이터를 전송하는 방법에 대한 토론

高洛峰
풀어 주다: 2023-03-02 19:18:02
원래의
1069명이 탐색했습니다.

특정 기능을 구현하기 위해 php와 javascript를 결합할 때 json을 자주 사용합니다. json은 js의 데이터 형식이며 js에서 직접 구문 분석할 수 있습니다. PHP는 json 데이터를 직접 읽을 수 없지만, PHP는 json 데이터를 PHP 스크립트에서 액세스할 수 있도록 변환하는 json_decode 함수를 제공합니다. 동시에 PHP는 데이터를 json 형식으로 변환하는 json_encode 함수도 제공합니다. 그렇다면 js의 기본 json은 php의 json_encode 함수에 의해 변환된 json과 정확히 동일합니까? 오늘 웹마스터는 이 문제를 모든 사람과 논의할 것입니다.

PHP를 통해 배열 데이터를 javascript에 전달할 때 일반적으로 json 형식으로 변환하여 javascript를 통해 가져와야 합니다. 먼저 배열을 예로 들어 둘의 차이점을 살펴보겠습니다.

1. 1차원 배열
PHP 배열을 고려해보세요
코드 복사 코드는 다음과 같습니다.
$array=array("1","2","3") ;

json_encode 함수를 사용하여 변환한 후 해당 json 문자열은
코드 복사 코드는
["1","2","3"]입니다.

주의 깊은 친구들은 변환 후 얻은 json 문자열이 자바스크립트에서 배열 형태인데 js의 배열 액세스 방법을 사용하여 액세스할 수 있다는 사실을 곧 발견했습니다.
물론 가능하지만 이 json 문자열을 js에 전달할 때 ​​다음과 같이 urlencode 함수를 사용하여 인코딩해야 합니다.
코드 복사 코드는 다음과 같습니다.
< ;a href="http: //www.php.cn/">
다음 js 코드를 사용하여 확인할 수 있습니다.
코드 복사 코드는 다음과 같습니다.
function show(str) {
var jobj=eval_r(decodeURI (str));
alert(jobj[2]);
}

직접 시도해 보면 그렇습니다. js에서 1차원 배열에 액세스합니다. eval 메서드는 json 문자열을 json 객체로 해석합니다. 왜냐하면 전달된 내용이 문자열이기 때문입니다. 변환되지 않으면 문자열의 세 번째 문자 값을 얻게 됩니다.
이 1차원 배열을 일부 변경해 보겠습니다. 위의 1차원 배열에는 지정된 인덱스가 없으므로 기본값은 숫자 인덱스입니다.
PHP 배열을 고려해보세요
코드 복사 코드는 다음과 같습니다:
$array=array('a'=>'1','b'=>'2','c'=>' 3');

json_encode 함수를 사용하여 변환한 후 해당 json 문자열은
코드 복사 코드는 다음과 같습니다.
{"a":"1","b":" 2","c":"3"}

.
가장 분명한 차이점은 문자열 양쪽 끝의 []가 {}가 되었다는 점입니다. 그러면 이 문자열을 위와 같이 처리하여 js에서 액세스할 수 있을까요? 한 번 시도해 보세요.
코드 복사 코드는 다음과 같습니다.
function show(str){
var jobj=eval_r (decodeURI(str));
alert(jobj.a);
}

해보시면 아시겠지만 링크를 클릭해도 팝업창이 뜨지 않습니다. . 왜? PHP에서 생성된 json 문자열 형식이 잘못되었나요? 아니요, 설명하기 위해 eval 함수를 사용했을 때 오류가 발생했습니다. 위의 함수 코드를 다음으로 바꾸세요.
코드 복사 코드는 다음과 같습니다.
function show(str){
var jobj=eval_r('('+decodeURI(str)+')')
Alert(jobj.a);
}

다시 시도하세요! 지금 방문하시면 어떨까요? 이는 eval 메서드를 사용하여 키 이름이 포함된 json 문자열을 처리할 때 문자열 양쪽 끝의 대괄호를 가속화해야 함을 알려줍니다. 왜인지는 웹마스터도 모릅니다. 그는 단지 거인의 어깨 위에 서 있을 뿐입니다.
PHP에서 생성된 json 문자열
{"a":"1","b":"2","c":"3"}은 js에 직접 전달될 수 없지만 여기에서 참고해야 합니다. json 형식으로 해석되지만 js에서 이 문자열을 사용하여 json 데이터를 직접 생성하면 괜찮습니다. 다음 코드를 사용해 보세요.
코드 복사 코드는 다음과 같습니다.
var jobj={"a":"1","b":"2","c":"3"}; > Alert(jobj.b);

2. 2차원 배열
2차원 배열은 PHP에서 널리 사용되므로 2차원 배열 변환 후 json 형식을 이해하는 것이 매우 중요합니다. . 위의 예를 예시로 웹마스터가 직접 아래의 샘플 코드를 제공합니다.
코드 복사 코드는 다음과 같습니다.
function show (str){
var jobj=eval_r(decodeURI(str))
alert(jobj[0][0])
}

실행하면 , 1차원 배열은 거의 동일하다는 것을 알 수 있습니다. 이는 키 이름이 없는 예이므로 show 함수에서는 문자열 양쪽 끝의 괄호를 제거하는 것도 가능합니다.
다음으로 2차원 배열을 일부 변경하고 두 번째 차원에 키 이름을 추가합니다. 샘플 코드를 참조하세요.
코드 복사 코드는 다음과 같습니다.
함수 표시(str){
var jobj=eval_r('('+decodeURI(str)+')');
alert(jobj[0].a);
}

모두가 코드를 실행한 후, 여기에서는 json 데이터에 액세스하는 방식이 약간 다릅니다. 위에서는
alert(jobj[0][0]);
을 사용했고 여기서는
alert(jobj[0].a);를 사용했습니다. 이유는 묻지 마세요. 이것이 json에 액세스하는 방법입니다.
위의 예에서는 2차원 배열의 두 번째 차원에 키 이름을 추가했습니다. 다음으로 액세스 방법이 어떻게 다른지 확인하기 위해 첫 번째 차원에 키 이름을 추가했습니다.
코드를 복사합니다. 코드는 다음과 같습니다.
var jobj=eval_r('('+decodeURI(str) +')');
alert(jobj.k[1]);
}

여기에서는
jobj.k[1]의 메소드를 사용합니다. 배열에 키 이름이 포함되어 있는 한 배열이 json 형식으로 변환되면
json object.Key name
을 사용하여 키 아래의 요소에 액세스해야 합니다. k 키는 숫자 인덱스이므로 k[1]을 사용하여 json에서 액세스합니다.
다음으로 배열의 첫 번째 차원과 두 번째 차원 모두에 키 이름을 추가합니다.
코드 복사 코드는 다음과 같습니다.
function show(str){
var jobj=eval_r('('+decodeURI(str)+')');
alert(jobj.k.a);
}

위와 같이 키 이름이 포함되어 있는 한
json object.key 이름
형식으로 접근해야 합니다. 키가 여러 개인 경우
json object.key를 사용하세요. name.key name..
, 이유는 묻지 마세요. 이것이 json에 액세스하는 방법입니다. 오직 javascript 창시자만이 이것을 규정한 이유를 설명할 수 있습니다.
결론:
1. php의 배열을 json 문자열로 변환하여 js에 전달할 때. 배열에 키 이름이 지정되지 않은 경우 js의 eval 메서드를 직접 사용하여 js 처리를 위해 이를 json 형식으로 변환할 수 있습니다. 배열에 키 이름이 포함되어 있으면 eval 메서드를 사용하여 이를 처리해야 합니다.
()
을 사용하여 json 문자열을 둘러싸세요.
2. 배열에 키 이름이 포함된 경우 json 문자열로 변환한 후
json object.key name.key name...
메서드를 사용하여 js에서 액세스합니다. 숫자 인덱스 그런 다음
json object[1]
또는
json object.key name[1]
을 사용하세요.
위에서는 PHP가 json 문자열을 js에 전달할 때 주의해야 할 사항을 주로 논의했습니다. 다음으로 js를 사용하여 php에 전달할 때 json 문자열을 처리하는 방법에 대해 설명합니다.
똑똑한 분이라면 json 데이터가 따옴표로 묶여 문자열(보통 ajax를 사용하여)로 PHP에 전달되는 한 json_decode 함수를 사용하여 디코딩할 수 있다는 것을 이미 알고 계실 것입니다. 좋아요! 그게 다야! 하지만 json 문자열을 구성할 때는 주의해야 합니다. json 문자열을 자주 구성하지 않는다면
echo json_encode(array('k'=>array("a"=>'1')를 사용하는 것이 좋습니다. , '2','3')))
이런 식으로 구성해야 할 대상 문자열의 json 형식을 확인합니다. 이런 식으로 원하는 결과에 따라 js에서 구성할 수 있습니다!
자, 오늘은 json 데이터를 사용하여 php와 js 사이에서 통신하는 방법에 대해 논의했습니다. json 인코딩 후에 php의 객체 유형을 js에 전달해 볼 수 있습니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!