2010-03-09 2 views
8

jQuery와 AJAX를 배우기 시작했습니다. 내 디스크의 로컬 페이지를 jQuery.load()을 통해 div에로드 할 수 있지만 외부 사이트가 작동하지 않는 것 같습니다. 나는 wireshark를 사용하여 데이터가 서버에서 전송되는지 확인합니다 (있는 그대로). 샘플 코드는 다음과 같습니다.AJAX를 통해 외부 페이지에서 데이터를로드 할 수 있습니까?

<html> 
<head> 
    <script src='jquery-1.4.2.min.js'></script> 
    <script> 
     $(document).ready(function() { 
      // $('#test').load('localpage.htm'); works! 
      $('#test').load('http://www.google.com/'); // does not work! 
     }); 
    </script> 
</head> 
<body> 
<div id='test'></div> 
</body> 
</html> 

처음부터 가능합니까? 그렇다면 어떻게?

+0

비슷한 질문 http://stackoverflow.com/questions/ 2217695/json-with-jquery/2217707 # 2217707 – yanoo

답변

0

다른 도메인에서 Ajax를 호출 할 수 없습니다. 이 JSON 기법을 확인하십시오.

+0

JSON은 예를 들어 일을하기위한 형식이므로 여기서는 도움이되지 않습니다. 아약스 전화.동일한 원산지 정책이 여기에서도 발생합니다. –

+0

JSONP를 언급했을 수 있습니다. – SLaks

2

Same Origin Policy으로 실행 중입니다. AJAX를 사용하여 외부 도메인의 데이터에 액세스 할 수는 없으며 보안 위험으로 간주됩니다. 그 이유는 AJAX 요청이 브라우저에 저장된 쿠키와 함께 작동한다는 것입니다. facebook.com에 액세스하려고 시도하고 거기에 로그인했다면 쿠키가 전송되어 개인 데이터에 액세스 할 수 있습니다.

2

보안상의 이유로 AJAX를 사용하여 다른 도메인 (또는 프로토콜 또는 포트)에서 페이지를 요청할 수 없습니다.

대신 서버에 다른 도메인으로 요청을 전달하는 스크립트를 작성할 수 있습니다. (file:// URL에서 페이지를 실행하는 경우에는 불가능합니다.

+0

HTTP 리다이렉션이나 '다른 도메인으로 요청 전달'을 의미하는지 확신 할 수 없습니다. 전자는 작동하지 않지만 전달은 올바른 도메인이 아닙니다. –

+0

@ 앤디 : 나는 프록시를 의미했다. 올바른 동사는 무엇입니까? – SLaks

+0

미안하지만, 나는 정말로 필요가 없을 때 까다 롭다. (아마도 직장의 스트레스, 아마도 ?;-)). 나는 포워딩을 용어로 사용할 수 있다고 생각하지만 그것은 나에게 잘못 읽었고 나는 거의 downvoted ;-) –

4

스크립트가 아닌 다른 도메인으로 ajax 호출을 수행 할 수 없습니다.

<script> 
    $(document).ready(function() { 
     $('#test').load('ajax/getgoogle.php'); 
    }); 
</script> 

getgoogle.php :

<?php 

echo file_get_contents("http://www.google.com/"); 

?> 
2

아약스

그런 일을 위해, 당신은, 예를 들어 자신의 페이지에 프록시 페이지를 사용해야? 예. XHR? No (브라우저가 아직 널리 확산되지 않은 Cross-site XHR을 구현하지 않은 경우).

XHR을 사용하지 않고 Ajax로 데이터를 얻으려면 외부 사이트가 JSONP format의 데이터를 제공해야합니다.

또는 서버의 서버 측 스크립트를 통해 데이터를 프록시 처리 할 수 ​​있으므로 JavaScript와 관련하여 동일한 호스트에서 데이터를 가져올 수 있습니다.

2

아니요, 그렇지 않습니다. Same Origin Policy을보십시오. 요청하려는 사이트가 작동하려면 JSONP이 활성화되어 있어야하고 cross-domain callback을 사용해야합니다. 또는 Ajax 요청 대신 페이지를 점유하는 자체 도메인에 프록시를 만들 수 있습니다.

1

로드 대신 웹 사이트에 직접

$filename = "http://www.sitename.com"; 
$handle = fopen($filename, "r"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $text .= fread($handle, 128); 
    } 
    fclose($handle); 
} 
print $text; 

편집을로드하려고의 PHP 스크립트 : 또는 단순히 file_get_contents와 졸개의 솔루션과 같은

대답에
+0

기본 설정에서 cURL을 사용하십시오. http://stackoverflow.com/questions/636678/what-are-the-important-differences-between-using-fopenurl-and-curl-in-php/637693 – Quentin

관련 문제