Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery AJAX处理API调用错误?_Javascript_Jquery - Fatal编程技术网

Javascript 如何使用jQuery AJAX处理API调用错误?

Javascript 如何使用jQuery AJAX处理API调用错误?,javascript,jquery,Javascript,Jquery,我正在制作一个天气应用程序作为学校项目。我有一个输入,通过它,用户应该输入一个城市的名称,以便从API获取天气。如果用户拼错了城市名称,我会在控制台中看到一个错误。我希望在这种情况发生时捕捉到它,并显示一些消息来通知用户更正输入。我也在StackOverflow和jQuery网站上搜索了其他问题,但没有得到我的答案,所以我来到这里 我的代码如下所示: $.ajax({ type: 'GET', url: 'http://api.openweathermap.org/data/2.

我正在制作一个天气应用程序作为学校项目。我有一个输入,通过它,用户应该输入一个城市的名称,以便从API获取天气。如果用户拼错了城市名称,我会在控制台中看到一个错误。我希望在这种情况发生时捕捉到它,并显示一些消息来通知用户更正输入。我也在StackOverflow和jQuery网站上搜索了其他问题,但没有得到我的答案,所以我来到这里

我的代码如下所示:

$.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密钥不是个好主意