2010-05-17 7 views
0

나는 어디에서나 보았으며 놀랍게도 이것에 대한 좋은 해결책을 찾을 수 없다! 텍스트 파일을 읽고 내용을 표시해야하는 다음 코드가 있습니다. 그러나 그것은 어떤 이유로 든 독서가 아닙니다. 내가 뭔가 잘못하고 있는거야?텍스트 파일 읽기

FTR, 저는 이것을 PHP로 사용할 수 없습니다. Javascript가되어야 해.

var txtFile = new XMLHttpRequest(); 
txtFile.open("GET", "http://www.mysite.com/todaysTrivia.txt", true); 
txtFile.send(null); 
txtFile.onreadystatechange = function() { 
if (txtFile.readyState == 4) { // Makes sure the document is ready to parse. 
    alert(txtFile.responseText+" - "+txtFile.status); 
    //if (txtFile.status === 200) { // Makes sure it's found the file.   
     var doc = document.getElementById("Trivia-Widget"); 
     if (doc) {    
     doc.innerHTML = txtFile.responseText ; 
    } 
    //} 
} 
txtFile.send(null); 
} 

내가 뭘 잘못하고 있는지 좋은 아이디어가 있습니까? 나 한테 제로 지위를 계속 지키고있어.

편집 :이 코드가 필요한 이유를 설명하는 것이 좋습니다. 그것은 기본적으로 다른 사람들이 자신의 웹 사이트에 넣을 수있는 위젯입니다.이 웹 사이트는 내 웹 사이트의 텍스트 줄을 가져 와서 자신의 웹 사이트에 표시합니다. 문제는 이것을 사용하는 다른 모든 사이트를 제로로 제어 할 수 있기 때문에 서버 측이 될 수 없다는 것입니다.

+0

이 작업을 수행하는 가장 쉬운 방법은 json-p를 통해 데이터를 제거 웹 사이트에 제공하는 것입니다. 구글 그것. – Erik

답변

8

이것이 교차 도메인 인 경우 동일한 원본 정책으로 인해 xmlhttprequest를 사용하여이를 수행 할 수 없습니다.

+0

예, 도메인 간입니다 – Cyprus106

1

Javascript를 통해 동일한 도메인의 XML 데이터 만 요청할 수 있다는 문제가있을 수 있습니다. 이것은 AJAX 호출에서 가장 큰 문제입니다. 텍스트 파일이 다른 서버에 있으면 AJAX를 통해 가져올 수 없습니다. 동일한 서버에있는 경우 상대 URL (http : // 없음)을 사용하여 요청하십시오.


편집 난 당신이 내 추천은 iframe을 사용하는 것입니다 ... 달성하기 위해 노력하고 알고 이제

. 서버 측 코드를 사용하여 서버에 시스템을 구축하고 원격 사이트가 iFrame을 임베드하여 자신의 사이트에 출력을 표시 할 수있게하십시오. NetworkedBlogs는이 기능을 사용하여 원격 사이트에 Facebook 기능을 표시합니다. iGoogle은 다양한 Apps 및 가젯과 함께 광범위하게 사용합니다. 그것은 상당히 검증 된 방법입니다.

iFrame을 사용할 때의 장점은 위젯의 대부분의 콘텐츠를 제어 할 수 있지만 최종 사용자가 스타일을 제어 할 수 있다는 것입니다. iFrame 응용 프로그램에서 쿼리 변수를 통해 인수를 수락하면됩니다. 색상, 위치 및 크기 변경).

+0

동적 스크립트 태그는 iframe보다 나은 솔루션이라고 할 수 있습니다 ... Google은 이제지도에서 사용합니다 (iframe을 사용하는 데 사용되었으며 비교가 제대로 이루어지지 않았습니다). 틀림없이, 사이트에서 CSS 등과 충돌하지 않도록 작업을해야 할 수도 있습니다. – rob

+0

사실 그것이 동적 스크립트가 아닌 iFrames를 권장하는 이유입니다. CSS는 완전히 분리되어있어 충돌을 피할 수 있습니다. – EAMann

0

AJAX에 대한 권리가 있다고 가정하면 (내가 확인하지는 않았 음) : PHP를 사용할 수 없다는 말입니다. 자바 스크립트를 비동기 적으로 사용해야하지만 여전히 일부 위치에서 서버 코드를 사용할 수 있다는 것을 의미합니다 , PHP (또는 서버 측 언어)를 사용하여 실제 작업을 수행하고 AJAX/javascript를 통해 페이지로 돌아가려면 Alex가 제기하는 문제를 해결할 수 있습니다.

그래서 javacript에서 mysite.com/something.txt를 가져 오는 대신 SomeAjaxHelper.php (또는 aspx 또는 기타)에서 가져 오십시오.

+0

다른 사람들이 자신의 웹 사이트에서 사용할 수있는 위젯이므로 서버 측을 사용할 수 없습니다. 문제의 .txt 파일에는 매일 "퀴즈"의 새로운 부분이 자동으로로드됩니다. – Cyprus106

+0

자바 스크립트 함수로 포장 된 문자열로 퀴즈 조각을 읽은 다음 서버 페이지를 스크립트로 가리키는 서버 코드는 어떻습니까? 예 : PHP 파일은 서버 코드를 사용하여 소스 파일을 읽고 다음과 같이 출력합니다. function getTriviaText() { "이 부분은 서버 코드에서 채워집니다"; } 위젯의 PHP 파일은 단순한 javascript 파일입니다. –

+0

나는 그것이 의미를 가지길 바래 ... –

1

이 예제에는 jQuery 코드가 들어 있습니다. proxy.php에서 다음

var text; 
$.get("proxy.php", function(data) { 
    text = data.responseText; 
}); 

: 여기에서 가져온

<?php 
header('Content-type: application/xml'); 
$daurl = 'http://www.mysite.com/todaysTrivia.txt'; 
$handle = fopen($daurl, "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $buffer = fgets($handle, 4096); 
     echo $buffer; 
    } 
    fclose($handle); 
} 

예 : http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html

으로 이전 설명은 XMLHTTP는 보안 문제에 대한 금지 크로스 도메인 요청을 위해 설계되었습니다. 그러나 PHP로 서버에서이 작업을 수행하는 것을 막을 수있는 방법은 없습니다.

또 다른 예

는 여기에서 찾을 수 있습니다 : http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

+0

경고 : 당신의 경고는 어리 석다. jquery 솔루션을 제공하는 것에 대한 불안감이 있다면 대신 정당화 해보십시오. –

+0

또는 전체 포스터 OP를 읽을 수 있고 그가 할 수없는 일을하려고하고 있다는 것을 깨닫게됩니다. jQuery. – Erik

+0

음 ... 그래. 내가 로컬 호스트에 있다면 그렇게했다. 분명히, 나는 약간의 jive를 끌어 내려고 시도하면 작동하지 않는다 : $ .get ("http://www.mysite.com/trivia-proxy.php", function (data) {\t 그 전체는 아니다. 가능한 "일이 찾고 있습니다. 한숨. – Cyprus106

0

크로스 도메인의 경우 비동기 적으로 데이터를 가져 오기 위해 동적 스크립트 태그를 사용해야합니다. todaysTrivia 파일은 데이터를 JSON으로 저장하는 .js 파일입니다. 이 기술을 사용하려면 Google에서 '동적 스크립트 태그 교차 도메인'을 사용하십시오.