AJAX和REST API调用

时间:2018-04-08 19:50:13

标签: ajax rest

我正在尝试创建一个AJAX脚本,该脚本将通过API提取数据并将其作为HTML显示在页面上。使用下面这条路线的所有内容似乎在Postman中都能正常工作,但是我无法在我的JS文件中进行翻译。

我知道我错误地调用了网址,而且我很确定它是因为:id。我不确定如何纠正它。我觉得我已尝试过每次网址迭代,但我错过了一些东西。

// router.REST_VERB('EXPRESS_ROUTE', api.ACTION)
router.get('/', api.list);
router.post('/', api.create);
router.get('/:id', api.read);
router.put('/:id', api.update);
router.get('/delete/:id', api.delete);

以下是我的更新和删除:

/ AJAX PUT - Update Reminder
function updateReminder(id) {
  $.ajax({
    type: 'PUT',
    url: '/api/',
    data: JSON.stringify({
      'id': $('#editId').val(),
      'name': $('#name').val(),
      'occasion': $('#occasion').val(),
      'lastgift': $('#lastgift').val()
    }), 
    success: (item) => { 
      document.location.href="/";
    },
      contentType: "application/json",
      dataType: 'json'
    });
}

// AJAX DELETE request - Delete Reminder
function deleteReminder(id) {
  $.ajax({
    type: 'DELETE',
    url: '/api',
    data: JSON.stringify({
      'id': id
    }), 
    success: (item) => { 
      document.location.href="/delete";
    },
      contentType: "application/json",
      dataType: 'json'
    });
}

修改

以下是更新和删除的控制器代码:

ApiController.update = (req, res) => {
reminderService.update(
    req.params.id,
    {
        name: req.body.name,
        occasion: req.body.occasion,
        lastgift: req.body.lastgift,
        prefgift: req.body.prefgift
    },
    {new: true}
)
.then((item) => {
    res.json(item);
})
.catch((err) => {
        if (err) console.log(err);
    });
};

ApiController.delete = (req, res) => {
reminderService.delete(req.params.id)
    .then((item) => {
        res.json(item);
    })
    .catch((err) => {
        if (err) {
            res.end("Didn't delete")
        }
    });
};

这是服务代码:

ReminderService.update = (id, reminderObj) => {
return Reminder.findByIdAndUpdate(
    id,
        {
            $set: reminderObj
        },
        {
            new: true
        }
    )

    .then((item) => {
        return item;
    })
    .catch((err) => {
                if (err) {  
                    res.end("You're in reminderService!")
                }                
    });
};

ReminderService.delete = (reminderId) => {
return  Reminder.deleteOne({ '_id': reminderId })
.then((item) => {
    return item;
})
.catch((err) => {
    throw err;
});
};

1 个答案:

答案 0 :(得分:0)

您的删除路线有误,您应该使用delete代替get

router.get('/', api.list);
router.post('/', api.create);
router.get('/:id', api.read);
router.put('/:id', api.update);
router.delete('/:id', api.delete);

在您的ajax请求中,您的网址缺少ID

// AJAX PUT - Update Reminder
function updateReminder(id) {
  $.ajax({
    type: 'PUT',
    url: '/'+id,
    data: JSON.stringify({
      'id': $('#editId').val(),
      'name': $('#name').val(),
      'occasion': $('#occasion').val(),
      'lastgift': $('#lastgift').val()
    }), 
    success: (item) => { 
      document.location.href="/";
    },
    contentType: "application/json",
    dataType: 'json'
  });
}

// AJAX DELETE request - Delete Reminder
function deleteReminder(id) {
  $.ajax({
    type: 'DELETE',
    url: '/'+id,
    data: JSON.stringify({
      'id': id
    }), 
    success: (item) => { 
      document.location.href="/delete";
    },
    contentType: "application/json",
    dataType: 'json'
  });
}

我怀疑的一件事是你在数据上使用JSON.stringify。您的API是否特别需要JSON,或者您是否只是尝试使其工作?