Запрос на удаление NodeJs через jQuery / ajax

У меня есть этот код на стороне сервера

 router.delete('/categories/delete/:id', function(req,res){
         var id = req.params.id;
          Category.remove({_id: id},function(err){
               if (err){
                    console.info(err);
               }
               req.flash('success','Category Deleted');
               res.location('/manage/categories');
               res.redirect('/manage/categories');
          });
    });

В представлении dustjs у меня есть эта кнопка <a href = "#" class = "removeCategory button tiny alert" data-id = "{._id}">Delete</a>

И в файле сценария у меня есть

$(document).ready(function(){
    $('.removeCategory').on('click', function(e){
        $target =  $(e.target);
        var id = $target.attr('data-id');
        $.ajax({
            type: 'DELETE',
            url: '/manage/categories/delete/'+id,
            success: function(response){
                alert('Delete');
                window.location = '/manage/categories';
            },
            error: function(err){
                console.info(err);
            }

        });
    });

});

Дело в том, что это вроде как работает, но категория исчезает только после того, как я обновляю страницу, но когда я смотрю на консоль, я получаю такое сообщение:

abort: function abort()
​
always: function always()
​
complete: function add()
​
done: function add()
​
error: function add()
​
fail: function add()
​
getAllResponseHeaders: function getAllResponseHeaders()
​
getResponseHeader: function getResponseHeader()
​
overrideMimeType: function overrideMimeType()
​
pipe: function then()
​
progress: function add()
​
promise: function promise()
​
readyState: 4
​
responseText: "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Error</title>\n</head>\n<body>\n<pre>Cannot DELETE /manage/categories</pre>\n</body>\n</html>\n"
​
setRequestHeader: function setRequestHeader()
​
state: function state()
​
status: 404
​
statusCode: function statusCode()
​
statusText: "Not Found"
​
success: function add()
​
then: function then()

Я также хочу отметить, что окно предупреждения никогда не появляется. Кто-нибудь знает, как исправить эту проблему? заранее спасибо

Что такое код на стороне сервера? Какой фреймворк?

gillyb 16.04.2018 14:51

Похоже, что вы на самом деле не возвращаете ответ клиенту со стороны вашего сервера, и что ваш обратный вызов success на клиенте не запускается из-за этого.

gillyb 16.04.2018 14:52

Спасибо за ваше мнение. Я посмотрю на это

Osiris 16.04.2018 18:57
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
3
1 493
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

похоже, что URL-адрес, который вы вызываете, неверен, свойство responseText дает намек на это:

Cannot DELETE /manage/categories

вот почему ваш обработчик ошибок называется:

error: function(err){
  console.info(err);
}

а не успех.

Вы уверены, что идентификатор определен правильно?

Да, идентификатор правильный, и ссылка, по которой я получаю доступ ко всем категориям: локальный: 3000 / управление / категории Вот почему URL-адрес - /manage/categories/delete/'+id, чтобы соответствовать коду на стороне сервера, а затем я хочу перезагрузить страницу. Я использую /manage/categories в window.location Если я не обновляю на странице ничего не происходит, как только я обновляюсь после нажатия кнопки, я получаю флэш-сообщение, и категория исчезает

Osiris 16.04.2018 17:08

Я исправил это, удалив # из ссылки. Я оставил его пустым. Вы были правы, ссылка, видимо, была проблемой. Спасибо за ваш ответ

Osiris 16.04.2018 17:18

Однако я все еще получаю это сообщение в консоли, и предупреждающее сообщение никогда не срабатывает, но я получаю флэш-сообщение, и категория удаляется

Osiris 16.04.2018 19:17

поддерживает ли этот маршрут метод удаления? Можете ли вы отправить часть кода на стороне сервера, где вы обрабатываете ответ?

b3nc1 16.04.2018 20:32

это код на стороне сервера: router.delete('/categories/delete/:id', function(req,res){ var id = req.params.id; Category.remove({_id: id},function(err){ if (err){ console.info(err); } req.flash('success','Category Deleted'); res.location('/manage/categories'); res.redirect('/manage/categories'); }); }); В моем основном комментарии я показал код на стороне сервера, только код dustjs, теперь я удалил "#" с якоря, чтобы он работал

Osiris 16.04.2018 21:44

как написал @gillyb, попробуйте что-нибудь вроде: res.send ('Получил запрос DELETE на / user'); в конце

b3nc1 17.04.2018 01:32

На стороне сервера я добавил, когда пытаюсь удалить категорию: if (err){ res.send('error'); } else{ res.send('success'); }, и в скрипте переднего плана, который я добавил для функции успеха: success: function(response){ if (response === 'error'){ alert('error'); } else if (response === 'success'){ console.info('it worked'); window.location.href = '/manage'; } },, и по-прежнему нет сообщения в консоли. Думаю, я оставлю это так.

Osiris 17.04.2018 11:56

Я добавил метод complete сразу после метода error во внешнем скрипте, и в этом методе я добавил window.location и консоль, и теперь я получаю сообщение в консоли.

Osiris 17.04.2018 12:34

Другие вопросы по теме