Успешная часть сообщения Ajax не работает в полном календаре - PullRequest
0 голосов
/ 25 июня 2019

В моем коде успешная часть метода ajax post не работает, и я не знаю почему.Этот ajax-вызов является частью функции fullcalendar через jquery.

Запрос ajax отправляет данные на пост-маршрут и использует их для базы данных cal (mysql).Передача данных и соответствующий SQL-запрос работает нормально, но успешная часть вызова ajax не работает (о чем свидетельствует отсутствие вывода console.log)

Ниже приведен код для вызова ajax:

        $.ajax({
         url:"/insertEventsIntoDirectorInput",
         type:"POST",
         data:{title:title, start:start, end:end, urlPath: window.location.href.match(/\/([^/]*)$/)[1]},
         success:function()
         {
            console.log('insert success function started');
          calendar.fullCalendar('refetchEvents');
          alert("Added Successfully");
         }
        })

Ниже приведен код почтового маршрута:

router.post('/insertEventsIntoDirectorInput', function (req, res) {
    if (req.body.title) {
        var urlVariable = req.body.urlPath;
        console.log(urlVariable);
        console.log(typeof urlVariable);
        var title = req.body.title;
        var start = req.body.start;
        var end = req.body.end;

        dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(eID) {
            console.log(eID);
            console.log(typeof eID);
            dbjsMethods.insertEventsInDirectorInput(eID[0].eID,title,start,end);
        })
        console.log(res);
    }   
});

Ниже приведен код для запросов sql (через node.js):

    geteIDFromDirectorInputForm: function (url, callback) {
        console.log('geteID function started');
        console.log(url);
        conn.query(`SELECT eID FROM directoravailabilitiesinputform where url = ?`, [url],
        function (err, results, fields) {
            if (err) throw err;
            console.log(results);
            return callback(results);
        });
    },

    insertEventsInDirectorInput: function (eID,title,start,end) {
        console.log('insert function started');
        console.log(typeof eID);
        conn.query('insert into directorinputevents(eID,title,start,end) values ("' +eID+ '","' +title+ '","' +start+ '","' + end + '")',
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Updated ' + results.affectedRows + ' row(s).');
            });
    },

Когда я запускаю функцию, я ожидаю, что будет вывод «вставка успешной функции запущена», как указано в console.log в первом бите кода, но этоотсутствует.

1 Ответ

1 голос
/ 25 июня 2019

Ваш обработчик .post() на сервере не отправляет ответ.Клиент все еще ждет ответа от сервера.Вам нужно всегда отправлять ответ обратно с сервера.

router.post('/insertEventsIntoDirectorInput', function (req, res) {
    if (req.body.title) {
        var urlVariable = req.body.urlPath;
        console.log(urlVariable);
        console.log(typeof urlVariable);
        var title = req.body.title;
        var start = req.body.start;
        var end = req.body.end;

        dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(eID) {
            console.log(eID);
            console.log(typeof eID);
            dbjsMethods.insertEventsInDirectorInput(eID[0].eID,title,start,end);
            res.sendStatus(200);
        })
        console.log(res);
    } else {
        res.sendStatus(500);
    }  
});

Здесь я вставил res.sendStatus(xxx), потому что не похоже, что клиент ожидает каких-либо данных от запроса, поэтому это просто отправляет статускод обратно без данных.


К вашему сведению, вам также необходимо исправить свой метод geteIDFromDirectorInputForm(), чтобы он правильно возвращал ошибки.

geteIDFromDirectorInputForm: function (url, callback) {
    console.log('geteID function started');
    console.log(url);
    conn.query(`SELECT eID FROM directoravailabilitiesinputform where url = ?`, [url],
    function (err, results, fields) {
        if (err) {
            callback(err);
        } else {
            console.log(results);
            callback(null, results);
        }
    });
},

И затем измените вызывающий код, чтобы посмотретьпри этой ошибке:

router.post('/insertEventsIntoDirectorInput', function(req, res) {
    if (req.body.title) {
        var urlVariable = req.body.urlPath;
        console.log(urlVariable);
        console.log(typeof urlVariable);
        var title = req.body.title;
        var start = req.body.start;
        var end = req.body.end;

        dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(err, eID) {
            if (err) {
                console.log(err);
                res.sendStatus(500);
            } else {
                console.log(eID);
                console.log(typeof eID);

                dbjsMethods.insertEventsInDirectorInput(eID[0].eID, title, start, end);
                res.sendStatus(200);
            }
        });
    } else {
        res.sendStatus(500);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...