Javascript 如何使用jQuery AJAX处理API调用错误?
我正在制作一个天气应用程序作为学校项目。我有一个输入,通过它,用户应该输入一个城市的名称,以便从API获取天气。如果用户拼错了城市名称,我会在控制台中看到一个错误。我希望在这种情况发生时捕捉到它,并显示一些消息来通知用户更正输入。我也在StackOverflow和jQuery网站上搜索了其他问题,但没有得到我的答案,所以我来到这里 我的代码如下所示:Javascript 如何使用jQuery AJAX处理API调用错误?,javascript,jquery,Javascript,Jquery,我正在制作一个天气应用程序作为学校项目。我有一个输入,通过它,用户应该输入一个城市的名称,以便从API获取天气。如果用户拼错了城市名称,我会在控制台中看到一个错误。我希望在这种情况发生时捕捉到它,并显示一些消息来通知用户更正输入。我也在StackOverflow和jQuery网站上搜索了其他问题,但没有得到我的答案,所以我来到这里 我的代码如下所示: $.ajax({ type: 'GET', url: 'http://api.openweathermap.org/data/2.
$.ajax({
type: 'GET',
url: 'http://api.openweathermap.org/data/2.5/find?q=' + valueFromInput + '&units=metric&type=like&mode=json&APPID=cdb7ecf86aa724f19f723f964e5f15ae',
dataType: 'json',
success: function (weatherData) {...//code}
我尝试将ajax放在一个try/catch块中,并添加了错误:function()。。在success下面,它仍然不会显示错误消息
为什么这不起作用?这在普通javascript中更容易实现吗?在成功函数中添加if语句,以检查列表中是否包含元素。否则,您将在尝试获取不存在的元素的名称时出错
success: function (weatherData) {
if (weatherData.list.length > 0)
document.getElementById("cityNameCountry_").appendChild(document.createTextNode((weatherData.list[0].name)));
}
从您的评论来看,您似乎使用了以下内容:
weatherData.list[0].name
你提到的回答是这样的
"message":"like","cod":"200","count":0,"list":[]
您应该检查您的响应,以查看是否有任何服务器错误
根据您提供的信息,我猜您似乎既没有考虑响应代码,也没有考虑项目数量。您应该将ajax成功处理程序更改为以下内容
$.ajax({
type: 'GET',
url: 'http://api.openweathermap.org/data/2.5/find?q=' + valueFromInput + '&units=metric&type=like&mode=json&APPID=cdb7ecf86aa724f19f723f964e5f15ae',
dataType: 'json',
success: function (result) {
// Error handling
if (result.code != '200'){
alert('some kind of error');
return false;
}
// Checking the number of list items
if (result.list.length > 0){
document.getElementById("cityNameCountry_").appendChild(document.createTextNode((result.list[0].name)));
}
}
});
错误是什么?我写道,如果我添加错误参数,它将不起作用。错误如下:app.js:40 Uncaught TypeError:无法在XMLHttpRequest的done(jquery-3.3.1.js:9305)处读取Object.firefith[as resolveWith](jquery-3.3.1.js:3398)处着火时未定义的Object.success(app.js:40)的属性“name”。(jquery-3.3.1.js:9548)显示的任何内容都不会生成该错误。在浏览器中,开发工具网络在输入无法解析时检查响应,并提供更多详细信息。我猜他们会返回一个响应对象,其中包含您需要查找的错误属性。还有status@Shepherd您在成功功能中的代码是什么?这听起来像是ajax成功了,并且成功地实现了您的成功功能,然后又失败了。既然您已经公开了您的api密钥,请创建一个演示来重现这个问题。顺便说一句,在这里公开api密钥不是个好主意