2012-03-20 5 views
2

json 결과를 반환하는 한 서버에 내 PHP 코드 페이지가 있습니다. PHP 파일은 getInfoData.php라고하고 반환 값은 다음과 같습니다.PHP, jQuery Ajax 및 json이 교차 도메인을 통해 반환합니다.

echo json_encode($v); 

아니오 내가 .getJSON (?)이 JSON을 읽고 같은 단절 벌금에 모든 것을 실행,하지만 난 그것을 호출 JS 페이지가 아닌 다른 단절에있을하는 PHP 페이지를 필요로 $를 사용할 수 있습니다 .

그렇다면 크로스 도메인 문제가 발생했을 때 알게됩니다.

그래서 나는 다음 (JSONP)를 사용하는 코드 변경 :

$.ajax({ 
    url: 'FILE_LOCATION_ON_ANOTHER_SERVER', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    success: function() { console.log("Success"); }, 
    error: function() {console.log('Failed!'); } 
}); 

을하지만 난 내 콘솔 다음 그냥 얻을 아무것도 표시되지 않습니다

http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343 

및 메시지 말 실패한!.

내가 뭘 잘못하고 어떻게하면이 문제를 해결할 수 있습니까?

감사

답변

3

JSONP 실제로 JSON 없습니다. 그것은 약간 "해킹"입니다. JSONP는 사실 JavaScript 파일이며, 다운로드되어 실행됩니다.

PHP 페이지에는 callback 매개 변수를 전달해야합니다. JSON을 "포장"해야합니다.

func({json: data}) 

그래서, 당신의 PHP는 다음과 같이해야합니다 : 그것은 다음과 같아야합니다

echo $_GET['callback'] . '(' . json_encode($v) . ')'; 
2

나는이 일반적으로 사용하지만 어쩌면 더 나은 방법

<?php header('content-type: application/javascript; charset=utf-8'); 

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 

echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')'; 

내가 본 이후이있다 모든 콜백 매개 변수를 제공해야합니다.

+0

JSONP는 실제로 JSON이 아니며 스크립트 태그에 추가되는 JavaScript 파일입니다. 대신'application/javascript' MIME을 사용해야합니다. –

+0

@Rock thaks 제안 : –

+0

답장을 보내 주셔서 감사합니다. –

관련 문제