2016-11-10 2 views
0

준비 상태를 검색하기 위해 코드를 사용하고 있으며 저에게 유익합니다. 이 콘텐츠에 다른 사례를 어떻게 추가 할 수 있습니까? 마찬가지로 URL을 사용할 수없는 경우 사용자에게 메시지를 인쇄하고 싶습니다.AJAX를 사용하여 준비 상태 검색하기

document.getElementById("div p").innerHTML = "Ping is not success!"; 

하고 일반 HTML 텍스트 다음 조금 더 장식적인 모양 만들기 위해 노력하고있다. 요청이 종료되면 readyState4입니다

url = "<whatever you want to ping>" 
ping = new XMLHttpRequest();  
ping.onreadystatechange = function(){ 

    document.body.innerHTML += "</br>" + ping.readyState; 

    if(ping.readyState == 4){ 
     if(ping.status == 200){ 
      result = ping.getAllResponseHeaders(); 
      document.body.innerHTML += "</br>" + result + "</br>"; 
     } 
    } 

} 
ping.open("GET", url, true);  
ping.send(); 
+1

') ((ping.status의 == 200) { 결과 = ping.getAllResponseHeaders 경우; console.log (결과) else { document.getElementById ("div p"). innerHTML = "Ping이 성공하지 못했습니다!"; }' – guest271314

+0

그것은 나쁜 URL을 말하는 오류가 발생하지 않습니다. https://jsfiddle.net/9Lnq4a7f/1/ – Itslearning

+1

@Itslearning Correct; 'https : // fiddle.jshell.net'에서 실행되는 스크립트는 다른 출처를 가지고 있기 때문에'https : // google.com'의 응답을 읽을 수 없습니다. 'https : // fiddle.jshell.net'에서 실행되는 스크립트는'https : // fiddle.jshell.net'에서 또는 CORS 헤더를 제공하는 서버에서만 다른 자원을 읽을 수 있습니다. – apsillers

답변

1

하지만 status200 이외의 값이 될 수 있습니다 그녀는 내 코드입니다. status0 인 경우 이는 네트워크 오류 또는 CORS 장애 (원본 교차 서버의 경우)를 나타냅니다. 다른 값 (예 : 404) 인 경우 스크립트가 서버에 도달했음을 의미하지만 사용 된 URL 경로가 의미가 없거나 서버 측 오류가 발생했기 때문에 서버가 요청을 성공적으로 처리하지 못했음을 의미합니다. .)

ping.onreadystatechange = function(){ 

    document.body.innerHTML += "<br>" + ping.readyState; 

    if(ping.readyState == 4){ 
     if(ping.status == 200){ 
      result = ping.getAllResponseHeaders(); 
      document.body.innerHTML += "<br>" + result + "<br>"; 
     } else if(ping.status == 0) { 
      document.getElementById("foobar").innerHTML = "Ping is not successful! Could not get any response from the server, due to a network failure, CORS error, or offline server."; 
     } else { 
      result = ping.getAllResponseHeaders(); 
      document.getElementById("foobar").innerHTML = "We got a response from the server, but it was status code " + ping.status; 
     } 
    } 

} 
+0

답변 해 주셔서 감사합니다. 나는 네가 의미하는 바를 정확히 이해했다고 생각하지 않는다. 그러나 나는 jsfiddle을 만들었다. 내가 옳은 글씨가 아닌 것 같아서 좀 봐 주시겠습니까? https://jsfiddle.net/xefd1xo7/3/ – Itslearning

+0

@Itslearning 몇 가지 문제 : 귀하의 바이올린은 실제로 '열기'또는 '보내기'를 호출하지 않으며 존재하지 않는 ID 값을 나타냅니다. 다음은 작동되는 정리 된 버전입니다. https://jsfiddle.net/xefd1xo7/5/. 또한, '8.8.8.8'은이 문맥에서 절대적인 이름이 아닙니다. 현재 출처 (예 :'https : // fiddle.jshell.net/8.8.8.8')에 경로 '/ 8.8.8.8'을로드합니다. 또한, 'domainA.com'이'domainB.com'의 메시지를 읽지 못하게하는 [동일 출처 정책] (https://en.wikipedia.org/wiki/Same-origin_policy)을 이해해야합니다. JSFiddle에서'http : // 8.8.8.8 /'로 변경하면 실패합니다. – apsillers

관련 문제