main.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. var request = new XMLHttpRequest()
  2. var selects = document.querySelector('.selects');
  3. var weatherDiv = document.querySelector('.weather');
  4. request.open('GET', 'https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json', true) // последний параметр указывает на синхронность или асинхронность запроса. В данном случае запрос асинхронный
  5. request.onreadystatechange = function(){ //обработчик изменения статуса запроса. Статус == 4 сигнализирует о том, что запрос окончен.
  6. if (request.readyState != 4){
  7. return;
  8. }
  9. if (request.status == 200){
  10. var object = JSON.parse(request.responseText);
  11. var keys = Object.keys(object);
  12. var select = document.createElement("select");
  13. for (var i = 0; i < keys.length; i++) {
  14. var option = document.createElement("option");
  15. option.innerHTML = keys[i];
  16. option.value = keys[i];
  17. select.appendChild(option);
  18. }
  19. select.onchange = function(e){
  20. console.log(this.value)
  21. var select = document.createElement("select");
  22. for (var i = 0; i < object[this.value].length; i++) {
  23. var option = document.createElement("option")
  24. option.innerHTML = object[this.value][i];
  25. select.appendChild(option);
  26. }
  27. if(selects.children.length > 1){
  28. selects.replaceChild(select, document.getElementById("main").nextElementSibling);
  29. }
  30. else
  31. selects.appendChild(select);
  32. request.open('GET', "https://query.yahooapis.com/v1/public/yql?" + 'q=' + encodeURIComponent("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\'" + select.value + "\') and u='c'") + '&format=json', true);
  33. console.log(this.value)
  34. request.onreadystatechange = function(){
  35. if(request.readyState === 4 && request.status === 200){
  36. console.log(JSON.parse(request.responseText));
  37. var obj = JSON.parse(request.responseText);
  38. var weather = obj.query.results.channel.item.description;
  39. var resWeather = weather.replace(/href|CDATA|[\!]|[\[]|[\]]/g,"");
  40. var resWeather2 = resWeather.slice(1,resWeather.length - 1);
  41. var resWeather3 = resWeather2.replace(/Full Forecast at Yahoo Weather/g,"");
  42. var resWeather4 = resWeather3.slice(0,resWeather3.length - 28);
  43. weatherDiv.innerHTML = resWeather4;
  44. console.log(resWeather4)
  45. // var resObj = obj.query.results;
  46. // var keys = Object.keys(resObj);
  47. // var table = document.createElement("table");
  48. // for (var i = 0; i < keys.length; i++) {
  49. // var tr = document.createElement("tr");
  50. // var td1 = document.createElement("td");
  51. // var td2 = document.createElement("td");
  52. // td1.innerHTML = keys[i];
  53. // td2.innerHTML = resObj[keys[i]];
  54. // tr.appendChild(td1);
  55. // tr.appendChild(td2);
  56. // table.appendChild(tr);
  57. // }
  58. // document.body.appendChild(table);
  59. }
  60. else if(request.readyState > 1 && request.readyState < 4){
  61. weatherDiv.setAttribute("heigt", "400px")
  62. weatherDiv.innerHTML = "loading...";
  63. }
  64. else if(request.status === 400){
  65. weatherDiv.innerHTML = "error 400";
  66. }
  67. }
  68. request.send();
  69. select.onchange = function(){
  70. request.open('GET', "https://query.yahooapis.com/v1/public/yql?" + 'q=' + encodeURIComponent("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\'" + this.value + "\') and u='c'") + '&format=json', true);
  71. console.log(this.value)
  72. request.onreadystatechange = function(){
  73. if(request.readyState === 4 && request.status === 200){
  74. console.log(JSON.parse(request.responseText));
  75. var obj = JSON.parse(request.responseText);
  76. var weather = obj.query.results.channel.item.description;
  77. var resWeather = weather.replace(/href|CDATA|[\!]|[\[]|[\]]/g,"");
  78. var resWeather2 = resWeather.slice(1,resWeather.length - 1);
  79. var resWeather3 = resWeather2.replace(/Full Forecast at Yahoo Weather/g,"");
  80. var resWeather4 = resWeather3.slice(0,resWeather3.length - 28);
  81. weatherDiv.innerHTML = resWeather4;
  82. console.log(resWeather4)
  83. // var resObj = obj.query.results;
  84. // var keys = Object.keys(resObj);
  85. // var table = document.createElement("table");
  86. // for (var i = 0; i < keys.length; i++) {
  87. // var tr = document.createElement("tr");
  88. // var td1 = document.createElement("td");
  89. // var td2 = document.createElement("td");
  90. // td1.innerHTML = keys[i];
  91. // td2.innerHTML = resObj[keys[i]];
  92. // tr.appendChild(td1);
  93. // tr.appendChild(td2);
  94. // table.appendChild(tr);
  95. // }
  96. // document.body.appendChild(table);
  97. }
  98. else if(request.readyState > 1 && request.readyState < 4){
  99. weatherDiv.setAttribute("heigt", "400px")
  100. weatherDiv.innerHTML = "loading...";
  101. }
  102. else if(request.status === 400){
  103. weatherDiv.innerHTML = "error 400";
  104. }
  105. }
  106. request.send();
  107. }
  108. }
  109. selects.appendChild(select);
  110. select.id = "main"
  111. }
  112. else {
  113. alert('shit happens: ' + xhr.status + ', ' + xhr.statusText );
  114. }
  115. }
  116. request.send()