2016-11-10 2 views
0

Я использую код для восстановления состояний готовности, и это работает для меня хорошо. Могу ли я спросить, как я могу добавить других участников в этом контенте. Например, если URL недоступен, я хотел бы напечатать сообщение пользователю. Например,Использование AJAX и получение состояний готовности

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

и попробуйте сделать его немного более интересным, чем простой текст в html. Ее это мой код:

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

Когда запросы заканчивается, readyState является 4, но status может быть значение, отличное от 200. Если status - 0, это указывает на сетевую ошибку или отказ 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 Несколько вопросов: ваша скрипка на самом деле не вызывает 'open' или' send', и это относится к значениям ID, которые не существуют. Вот очищенная версия, которая работает: https://jsfiddle.net/xefd1xo7/5/. Кроме того, '8.8.8.8' не является серовым именем в этом контексте; он будет загружать путь '/ 8.8.8.8' на текущее начало координат (например,' https: // fiddle.jshell.net/8.8.8.8'). Кроме того, вы должны понимать политику [того же происхождения] (https://en.wikipedia.org/wiki/Same-origin_policy), которая запрещает 'domainA.com' читать сообщения от' domainB.com', поэтому запрос на 'http: // 8.8.8.8 /' из JSFiddle не удался. – apsillers