首页 > 解决方案 > 即使使用了失败函数,带有 422 状态的 jQuery ajax 调用也会导致 chrome / edge 控制台错误

问题描述

语境

从计划工具调用 API 以返回雇主的事件。如果某个雇主没有任何事件,API 将返回 422(相当奇怪的行为,我只希望一个空数组 - 但我无法控制该 API)。

我正在使用 javascript/jquery (在科尔多瓦应用程序中,但这不重要?)并在浏览器中运行。如果 API 返回 1 个或多个事件,一切都会很好。

代码片段

let eventPromises = [];
let projectPromises = [];

let completeEvents = [];

 $.ajax({
        url: baseUrl + `resources/${ID}/events`,
        type: "GET",
        headers: {
            "apikey": apikey
        }
    }).then(function(events) {

        events.entities.forEach(event => {
            eventPromises.push(

                //get Event data
                $.ajax({
                    url: baseUrl + `events/${event[0].entityValue}`,
                    type: "GET",
                    headers: {
                        "apikey": apikey
                    }

                }).then(function(detailedEvent) {

                    projectPromises.push(

                        //Get project data
                        $.ajax({
                            url: baseUrl + `resources/${detailedEvent.entities[0][23].entityValue}`,
                            type: "GET",
                            headers: {
                                "apikey": apikey
                            }
                        }).done(function(project) {

                            let eventObj = new Object();
                            eventObj.eventData = detailedEvent;
                            eventObj.projectData = project;
                            completeEvents.push(eventObj)

                        }));
                }));
        });

    }).then(function() {
        Promise.all(eventPromises)
            .then(() => {

                Promise.all(projectPromises)
                    .then(() => {
                        if (completeEvents != null && completeEvents.length > 0) {

                         //Here everything works and I append some html

               })
            })

    })

错误(在浏览器控制台中) jquery.min.js:2 GET http://localhost:3000/proxy/https*****events%3FbeginDate%3D01%2F01%2F2021%26endDate%3D16%2F01%2F2021 422 (422 )

问题

  1. 有谁看到我做错了什么?

  2. 也可以随意评论代码。我知道它可能看起来很奇怪(链接,并且可能是错误的原因),但这是我现在能想到的最好的。我需要调用多个端点来获取所有数据(api 不提供批处理或任何东西)。

谢谢您的帮助。

标签: jqueryajaxjquery-chaining

解决方案


推荐阅读