如果对象 属性 的状态检查并不总是存在,则会中断该功能
If state check for object property that is not always there breaks the function
我正在构建一个天气应用程序。用户提交邮政编码或城市名称 + 州并关闭 $.getJSON 函数。
我试图实现的功能是检查用户是否给出了错误的值。例如,如果用户输入 New York, New York
、Baltimore
或 90210
,则用户将获得预测。但是,如果用户输入了无法找到的错误内容,例如 999999999
,则应提醒用户并且该函数应重置输入以供用户重试。
我认为 if 语句并不总是需要一个 else 来让我通过。问题是对于格式正确的请求,data.response.error.description
不存在,因此该函数会挂起并退出。 如果这个对象 属性 不存在,我该如何解决? 我尝试了一些 else
语句,但似乎只检查了 data.response.error.description
等于其他东西。
我做错了什么?
var url = 'http://api.wunderground.com/api/7434225907cbf087/forecast/q/';
var userInput;
var end = '.json';
$(document).ready(function() {
$('#button').on('click', function() {
$('#myDiv').html("");
userInput = ($('#input').val());
$.getJSON(url + userInput + end, function(data) {
console.log("user input: " + userInput);
console.log(data);
if (data.response.error.description ==
"No cities match your search query") {
$('#input').val("");
alert("Your input was incorrect, try again!");
return;
};
$('#userSubmission').html("");
$('#userSubmission').html(userInput);
//var highFahrenheit = data.forecast.simpleforecast.forecastday[0].high.fahrenheit;
//console.log(data.forecast.simpleforecast.forecastday[0])
//console.log(highFahrenheit);
$('#myDiv').html("Today's high is " + highFahrenheit +
" degrees Fahrenheit");
});
$('#input').val("");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="button">Click Me</button>
<input type="text" placeholder="Location" id="input">
<div id="userSubmission"></div>
<div id="myDiv"></div>
<div id="verify"></div>
在 data.response
的情况下,data.hasOwnProperty("response")
可以告诉您 data
是否有一个名为 response
的键。
如果它有函数将 return true
否则将 return false
.
向前走,确保永不中断。
data &&
data.hasOwnProperty("response") &&
data.response.hasOwnProperty("error") &&
data.response.error.hasOwnProperty("description") &&
data.response.error.description == "No cities match your search query"
永远不会坏。
在检查子 属性 之前,检查包含的 属性 是否存在:
if (data.response && data.response.error && data.response.error.description == "No cities match your search query")
我正在构建一个天气应用程序。用户提交邮政编码或城市名称 + 州并关闭 $.getJSON 函数。
我试图实现的功能是检查用户是否给出了错误的值。例如,如果用户输入 New York, New York
、Baltimore
或 90210
,则用户将获得预测。但是,如果用户输入了无法找到的错误内容,例如 999999999
,则应提醒用户并且该函数应重置输入以供用户重试。
我认为 if 语句并不总是需要一个 else 来让我通过。问题是对于格式正确的请求,data.response.error.description
不存在,因此该函数会挂起并退出。 如果这个对象 属性 不存在,我该如何解决? 我尝试了一些 else
语句,但似乎只检查了 data.response.error.description
等于其他东西。
我做错了什么?
var url = 'http://api.wunderground.com/api/7434225907cbf087/forecast/q/';
var userInput;
var end = '.json';
$(document).ready(function() {
$('#button').on('click', function() {
$('#myDiv').html("");
userInput = ($('#input').val());
$.getJSON(url + userInput + end, function(data) {
console.log("user input: " + userInput);
console.log(data);
if (data.response.error.description ==
"No cities match your search query") {
$('#input').val("");
alert("Your input was incorrect, try again!");
return;
};
$('#userSubmission').html("");
$('#userSubmission').html(userInput);
//var highFahrenheit = data.forecast.simpleforecast.forecastday[0].high.fahrenheit;
//console.log(data.forecast.simpleforecast.forecastday[0])
//console.log(highFahrenheit);
$('#myDiv').html("Today's high is " + highFahrenheit +
" degrees Fahrenheit");
});
$('#input').val("");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="button">Click Me</button>
<input type="text" placeholder="Location" id="input">
<div id="userSubmission"></div>
<div id="myDiv"></div>
<div id="verify"></div>
在 data.response
的情况下,data.hasOwnProperty("response")
可以告诉您 data
是否有一个名为 response
的键。
如果它有函数将 return true
否则将 return false
.
向前走,确保永不中断。
data &&
data.hasOwnProperty("response") &&
data.response.hasOwnProperty("error") &&
data.response.error.hasOwnProperty("description") &&
data.response.error.description == "No cities match your search query"
永远不会坏。
在检查子 属性 之前,检查包含的 属性 是否存在:
if (data.response && data.response.error && data.response.error.description == "No cities match your search query")