3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
正如 Todd R 所說,你只需要在訪問屬性之前找到你真正想要的數(shù)組元素。您也不需要,JSON.stringify因?yàn)檫@些值已經(jīng)是字符串或數(shù)字,可以直接放入 HTML 中。將它們包裝在 stringify 調(diào)用中將導(dǎo)致將引號(hào)添加到字符串值中,例如。
<li>City: "San Francisco"</li>
示例代碼:
xhr.onload = function(){
const city = document.getElementById('city').value;
if(this.status == 200){
let cityWeathers;
try {
cityWeathers = JSON.parse(this.responseText);
} catch (e) {
// JSON not valid, show error message
}
const cityWeather = Array.isArray(cityWeathers) && cityWeathers.find((obj)=>obj.name === city);
if (cityWeather) {
const result = `<ul><li>City: ${cityWeather.name}</li>` +
`<li>Weather: ${cityWeather.weather[0].description}</li>` +
`<li>Latitude: ${cityWeather.coord.lat}</li>` +
`<li>Longitude: ${cityWeather.coord.lon}</li></ul>`;
document.getElementById('weather').innerHTML = result
}
}
}

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是一個(gè)略有不同的演示,展示了使用fetch()作為執(zhí)行 Ajax 的新 Vanilla Javascript 方式:
我只獲取一次數(shù)據(jù)(在加載時(shí),然后掃描數(shù)組以查找與城市匹配的模式。這綁定到keyup輸入字段的事件,使按鈕過時(shí)。
var data, ct=document.querySelector('#city'), wt=document.querySelector('#weather');
fetch('https://jsonplaceholder.typicode.com/users')
.then(function(r){r.json().then(function(da){data=da;
document.querySelector('#all').innerHTML=data.map(function(v){return v.address.city}).join(', ');});
})
ct.addEventListener('keyup',function(){
wt.innerHTML='';
var i,n=data.length, rx=new RegExp(ct.value,'i');
for (i=0;i<n;i++) if (rx.test(data[i].address.city)) {
wt.innerHTML=data[i].address.city+': '+data[i].address.zipcode
}
});
<input id="city"><br>
<div id="all"></div>
<h1>City and zip code</h1>
<div id='weather'></div>

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您快到了。在“forEach”評(píng)論開始的地方,通過weatherTest“找到”(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)匹配“city”的元素”。然后使用從“find”返回的元素來構(gòu)建“result”。
添加回答
舉報(bào)