2016-08-17 4 views
0

Я создал код, который должен отображать некоторые данные из API openweather после ввода в город и страну. В настоящее время он ничего не делает после нажатия кнопки отправки.HTML-кнопка, не отображающая данные API OpenWeather

Это мой HTML-файл: Index.html

<head> 
    <title>Open Weather API</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script type="text/javascript" src="mainWeather.js"></script> 
</head> 

<body> 
    <div id="userArea"> 
     <div id="stateWrapper"> 
      <input type="text" id="cityInput" placeholder="Enter a State"/> 
     </div> 
     <br/> 
     <div id="countryWrapper"> 
      <input type="text" id="countryInput" placeholder="Enter a Country"/> 
     </div> 
     <br/> 
     <div id="buttonArea"> 
      <input type="submit" id="submitWeather"/> 
     </div> 
    </div> 
    <!- USED TO SHOW RESULT --> 
    <div id="weatherWrapper"> 
    </div> 
</body> 

В моем коде я изменил "ключ", чтобы мой фактический ключ

Вот мой Файл JavaScript: mainWeather.js

var mainWeather = { 
    init: function() { 
     $("#submitWeather").click(function() { 
      return mainWeather.getWeather(); 
     }); 
    }, 

    getWeather: function() { 
     $.get('http://api.openweathermap.org/data/2.5/weather?q=' + $("#cityInput").val() + "," + $("#countryInput").val() + "Key", function (data) { 
      var json = { 
       json: JSON.stringify(data), 
       delay: 1 
      }; 
      echo(json); 
     }); 
    }, 

    //Prints result from the weatherapi, receiving as param an object 
    createWeatherWidg: function (data) { 
     return "<div class='pressure'> <p>Temperature: " + (data.main.temp - 273.15).toFixed(2) + " C</p></div>" + 
      "<div class='description'> <p>Title: " + data.weather[0].main + "</p></div>" + 
      "<div class='description'> <p>Description: " + data.weather[0].description + "</p></div>" + 
      "<div class='wind'> <p>Wind Speed: " + data.wind.speed + "</p></div>" + 
      "<div class='humidity'> <p>Humidity: " + data.main.humidity + "%</p></div>" + 
      "<div class='pressure'> <p>Pressure: " + data.main.pressure + " hpa</p></div>"; 
    } 
}; 

var echo = function (dataPass) { 
    $.ajax({ 
     type: "POST", 
     url: "/echo/json/", 
     data: dataPass, 
     cache: false, 
     success: function (json) { 
      var wrapper = $("#weatherWrapper"); 
      wrapper.empty(); 
      wrapper.append("<div class='city'> <p>Place: " + json.name + ", " + json.sys.country + "</p></div>"); 
      wrapper.append(mainWeather.createWeatherWidg(json)); 
     } 
    }); 
}; 

mainWeather.init(); 

Я не могу понять, почему он не работает. Эти два файла находятся в одной папке.

+0

любые ошибки в консоли? вы сказали, что два файла находятся в одной папке, но в HTML ваш '' подразумевает, что он должен находиться в подпапке под названием "/ resources/js " – ADyson

+0

О, извините, у меня было это в этой папке, но я переехал и забыл изменить код! Я изменил код, и он все еще не работает, и в консоли нет ошибок. –

ответ

0

изменение

$("#submitWeather").click(function() { 
     return mainWeather.getWeather(); 
    }); 

в

$("#submitWeather").click(function (event) { 
     event.preventDefault(); 
     return mainWeather.getWeather(); 
    }); 

это:

event.preventDefault(); 

остановит страницу разместить обратно. Так как «#submitWeather» представляет собой ввод типа «submit», это приводит к постобработке полной страницы по умолчанию, прежде чем он когда-либо будет запускать javascript.

Во-вторых, оберните весь mainWeather.js в $ (function() {...}); блок. Мне приходит в голову, что обработчик события клика настраивается до того, как элемент, обработанный им, будет обработан. Блок заставит код ждать, пока весь документ не будет готов.

+0

Я добавил код, и он все еще не работает, он не отображает данные после нажатия кнопки –

+0

. Попробуйте обернуть весь mainWeather.js в a $ (function() {...}); блок. Мне приходит в голову, что обработчик события клика настраивается до того, как элемент, обработанный им, будет обработан. Блок заставит код ждать, пока весь документ не будет готов. – ADyson

+0

Я пробовал, что он все еще не работает :( –