2010-07-20 2 views
0

은이 코드를 사용하여 웹 사이트의 HTML 얻기 위해 노력하고 있어요 : 나는 HTML을 반환하는 서버를 참조하십시오 Wireshark를 잡아 작업을 수행 할 때Javascript HTTP HTML/텍스트가 null/empty를 반환합니까?

function catchData(req) { 
    console.debug("i got a reply!"); 
    var returnXML = req.responseXML; 
    console.debug(returnXML); 
    if (!returnXML) 
    { 
    console.debug("html is bad"); 
    return; 
    } 
    if (speed != currentSpeed) 
    moveToNewSpeed(speed); 
    currentSpeed = speed; 
    var error = returnXML.getElementsByTagName('message')[0].firstChild; 
    if (error) { 
    document.getElementById('errorMessage').innerHTML = error.nodeValue; 
    document.getElementById('errorMessage').style.visibility = 'visible'; 
    } 
    else 
    document.getElementById('errorMessage').style.visibility = 'hidden'; 
    } 

function sendRequest(url,callback,postData) { 
    console.debug(url); 
    console.debug(postData); 
    var req = createXMLHTTPObject(); 
    if (!req) return; 
    var method = (postData) ? "POST" : "GET"; 
    console.debug(method); 
    req.open(method,url,true); 
    console.debug("request Opened"); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    if (postData) 
    { 
    req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
    console.debug("set post data"); 
    } 
    req.onreadystatechange = function() { 
    if (req.readyState != 4) 
    { 
    console.debug("bad ready state"); 
    return; 
    } 
    console.debug(req); 
    console.debug("responseText:"); 
    console.debug(req.responseText); 
    callback(req); 
    console.debug("callback finished"); 
    } 
    if (req.readyState == 4) return; 
    req.send(postData); 
    } 

var XMLHttpFactories = [ 
function() {return new XMLHttpRequest()}, 
function() {return new ActiveXObject("Msxml2.XMLHTTP")}, 
function() {return new ActiveXObject("Msxml3.XMLHTTP")}, 
function() {return new ActiveXObject("Microsoft.XMLHTTP")} 
]; 

function createXMLHTTPObject() { 
var xmlhttp = false; 
for (var i=0;i<XMLHttpFactories.length;i++) { 
    try { 
    xmlhttp = XMLHttpFactories[i](); 
    } 
    catch (e) { 
    continue; 
    } 
    break; 
} 
return xmlhttp; 
} 

,하지만 req.responseText은 빈 문자열입니다. 누구나 다 알아?

답변

0

어디에서 자바 스크립트가 실행되고 있습니까? 같은 출처의 정책 위반이 있습니까?

내가 정책을 위반하고 있지만 요청이 계속 진행되고있는 상황에서 나는 이상한 행동을 보았 기 때문에 묻습니다. 응답이 비어 있었는데 ... 브라우저가 요청을 보내면 아무런 의미가 없지만 모두 다르게 처리됩니다 ...

0

이 코드를 직접 작성하는 이유가 있습니까? jQuery와 같은 라이브러리를 사용하는 대신? 당신은 그것을 훨씬 쉽게 발견 할 것이고 이미 브라우저 상호 운용성과 관련된 모든 단점을 알아 냈습니다.

1

JavaScript와 다른 도메인에있는 페이지의 HTML을 얻으려는 것 같습니다. 이것은 도메인 간 요청이며 자바 스크립트에서는 허용되지 않습니다. 이것은 대개 스크립트에서 빈 응답으로 간주됩니다.

JSONP 표준은 다른 도메인에서 JSON을 검색하는 메커니즘을 설명하지만 다른 사이트에서 구현해야하며 HTML에서는 작동하지 않습니다.

Yahoo! Query Language (YQL)은 프록시 역할을 할 수 있습니다. 야후! 서버는 HTML을 가져 와서 JSONP 응답을 작성합니다.이 응답은 스크립트에서 수신하게됩니다. 이것은 당신이 당신의 목표를 달성하는 데 도움이 될 수 있습니다. YQL은 다른 사이트에서 콘텐츠를 검색하기위한 멋진 기능을 많이 가지고 있습니다. 설명서를 읽고 내가 사용할 수있는 것이 있는지 확인하는 것이 좋습니다.

관련 문제