如何使用方法get修复Form动作

时间:2019-04-08 11:46:05

标签: javascript html css

我的代码有一个小问题。 基本上,我的index.html文件中有一个表单:

第1页上的表单如下:

tf.matmul()

对于此表单,我想使用OpenWeatherMap API来获取一些天气数据。我的问题如下: 我想获取用户在表单中输入的内容,例如,我认为我可以使用它:

<form method="get" name="basicSearch" id = "basicSearch" action="page2.html">
    <input name="location" type="text" class="BasicSearch" id="searchInput" placeholder="Location">
    <button type= "submit" class="BasicSearch" id="searchBtn" placeholder="Search"></button>
</form>

在此变量中,我可以存储位置。 而这个变量,我想在JavaScript代码中附加到确实从API提取数据的链接。 当用户输入例如:New York,然后按Search时,表单操作应将他重定向到var searchInput = document.getElementById("searchInput"); ,在那里我可以显示天气数据。

如何从第1页输入位置显示第2页中的天气数据?我尝试了很多次,但是没有运气。 下面是一些Javascript代码:

page2.html

这是一些应获取天气数据的JavaScript代码。 然后,在第2页中,HTML中包含以下内容:

let units = 'metric';
let searchMethod = 'q';

let searchButton = document.getElementById("searchBtn");
let searchInput = document.getElementById("searchInput");

if (searchButton) {
    searchButton.addEventListener('click', () => {
        let searchTerm = searchInput.value;
        if (searchTerm)
            searchWeather(searchTerm);
    });
}

function searchWeather(searchTerm) {
    fetch(`http://api.openweathermap.org/data/2.5/weather?${searchMethod}=${searchTerm}&APPID=${appId}&units=${units}`).then(result => {
        return result.json();
    }).then(result => {
        init(result);
    })
}

function init(resultFromServer){
    let weatherDescriptionHeader = document.getElementById('weatherDescriptionHeader');
    let temperatureElement = document.getElementById('temperature');
    let humidityElement = document.getElementById('humidity');
    let windSpeedElement = document.getElementById('windSpeed');
    let cityHeader = document.getElementById('cityHeader');
    let weatherIcon = document.getElementById('documentIconImg');

    weatherIcon.src = 'http://openweathermap.org/img/w/' + resultFromServer.weather[0].icon + '.png';

    let resultDescription = resultFromServer.weather[0].description;
    weatherDescriptionHeader.innerText = resultDescription.charAt(0).toUpperCase() + resultDescription.slice(1);

    temperatureElement.innerHTML = Math.floor(resultFromServer.main.temp) + '&#176' + " C";
    windSpeedElement.innerHTML = 'Winds at ' + Math.floor(resultFromServer.wind.speed) + ' mph';
    cityHeader.innerHTML = resultFromServer.name;
    humidityElement.innerHTML = 'Humidity levels at ' + resultFromServer.main.humidity + '%';
}

我希望在div所在的第2页中有天气数据。 有人可以给我个建议吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

由于第1页中的表单在第2页中不存在,请删除

let searchButton = document.getElementById("searchBtn");
let searchInput = document.getElementById("searchInput");

if (searchButton) {
    searchButton.addEventListener('click', () => {
        let searchTerm = searchInput.value;
        if (searchTerm)
            searchWeather(searchTerm);
    });
}

代替放置

ley searchTerm = new URLSearchParams(location.search).get('location');
searchWeather(searchTerm);

说明

提交第1页表单后,它将像加载第2页一样

page2.html?location=xxxx

其中xxxx<input name='location' ...

的值

location.search将是?location=xxxx

URLSearchParams使处理这些问题(尤其是在您有多个问题时)比通过箍进行拆分/解码/跳转的旧方法更容易

答案 1 :(得分:1)

我们只需提交表单并从page2.html上的url获取当前表单输入

<form method="get" name="basicSearch" id = "basicSearch" action="page2.html">

        <input name="location" type="text" class="BasicSearch" id="searchInput" placeholder="Location">
        <button type= "submit" class="BasicSearch" id="searchBtn" placeholder="Search">Search</button>

</form>

在加载page2.html之前(在进行ajax调用之前),我们可以通过以下操作从URL获取“ searchInput”(位置):

<script>
   let params = (new URL(document.location)).searchParams;
   var searchInput= params.get('location');
</script>

现在,我们可以将“ searchInput”参数用于您的api调用并获取结果。