2012-09-19 2 views
3

서비스 (프록시)에 다른 Ajax JSONP 요청을 작성하는 프록시 페이지에서 수신하는 JSONP Ajax 요청 (client.htm에서 proxy.htm으로)을 보내려고합니다. htm ---> service.php). 현재 프록시 페이지는 서비스에서 JSON 형식 객체를 받지만 첫 번째 초기 Ajax 요청으로 객체를 반환해야합니다. 다음은 실행하려고하는 샘플 코드입니다. Javascript로 가능합니까? 그렇다면 어떻게 객체를 clientCallback 함수로 반환 할 수 있습니까?Javascript에서 JSONP Ajax 콜백 호출

Client.htm

// CLIENT ---> PROXY 
$(document).ready(function() { 
    $.ajax({ 
      type: 'GET', 
      url: 'http://localhost/jsonp_proxy/listener.htm', 
      dataType: 'jsonp', 
      jsonpCallback: "clientCallback", 
      success: function (theData) { 
       alert("Success"); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert("Error"); 
      } 
     }); 
     }); 
     window.clientCallback = function(results) { 
     alert(results.uid); 
     } 

Proxy.htm

 // PROXY ---> SERVER 
     $(document).ready(function() { 
     $.ajax({ 
      type: 'GET', 
      url: 'http://localhost/jsonp_server/service.php', 
      dataType: 'jsonp', 
      jsonpCallback: "proxyCallback",  
      success: function (theData) { 
//   alert("Success"); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
//   alert("Error"); 
      } 
     }); 
     }); 
     window.proxyCallback = function(resultData) { 
     // HOW TO CALL CLIENT CALLBACK FUNCTION 
     } 

Service.php 몇 반 올바른 사용

<?php 
echo "proxyCallback("."{'uid': 123, 'username': 'jdirt', 'name': 'Joe Dirt'}".");"; 
?> 

답변

0

하나 eval에 대한 S : 그냥 알리미로

success: function (theData) { 
    eval("(" + theData + ")"); 
    //alert("Success"); 

, JSONP 해킹 및 보안 위험의 무언가이다. 당신은 제 3 자에게 많은 신뢰와 통제권을 부여합니다.

+0

답장을 보내 주셔서 감사합니다.하지만이 질문은 client.htm 페이지로 되돌아 가지 않습니다. Ajax는 오류 기능을 사용한다. – Manny

+0

절대로 eval()을 사용하지 마십시오. JSON.parse()를 사용하십시오. – saml

+0

@saml - 일반적으로 동의 하겠지만'JSONP'는'JSON'과 약간 다른 짐승입니다. 'JSONP'는 내부 콜백 핸들러를 포함하고 있기 때문에'eval'되어야하는 * 실행 코드 *입니다. –

0

window.proxyCallback에서 window.clientCallback을 호출하기 만하면됩니다.

+0

이전에 시도했지만 작동하지 않습니다. – Manny

+0

"작동하지 않음"은 실패를 설명하는 매우 애매한 방법입니다. 어떻게 된 거예요? 무슨 일이 당신이 예상했던대로 작동하지 않았던가요? 당신은 실제로 무엇을 시도 했습니까? – saml

+0

좋아, 그래서 * window.proxyCallback * * window.clientCallback * 호출 해봤지만 client.htm 찾아보기 요청의 오류 기능에 들어갑니다. 나는 그것들을 세계화시키지 않고 함수를 호출하려고 시도했고 같은 결과를 얻었다. PHP 페이지에서 proxyCallback을 호출해도 문제가 없지만 Javascript와 동일한 작업을 수행 할 수없는 것 같습니다. – Manny