2017-01-01 74 views
1

我使用node/express和jquery构建api,并且由于某些原因,我的DELETE请求未能触发。'DELETE'请求不能用jquery和Express删除

JQUERY:

$('.formula-body').on('click', function (e) { 
    if (e.target.className == 'fa-trash-o') { 
     $.ajax({ 
     url: 'formula-api/' + e.target.id, 
     type: 'DELETE', 
     success: updateIngredient 
     }); 
    } 
}); 

function updateIngredient(data) { 
    $('.formula-body').empty(); 
    var output = ''; 
    $.each(data, function (key, item) { 
     output = ` 
    <tr> 
     <td>${item.name}</td> 
     <td>${item.amount}</td> 
     <td>${item.notes}</td> 
     <td><a><span id ="${key}" class="fa fa-trash-o"> </span></a></td> 
    </tr> 
    `; 
     $('tbody').append(output); 
    }); 
}; 

HTML:

<div class="centered"> 
<h2>Your Formula</h2> 
    <table class="centered-block pure-table pure-table-striped formula-table"> 
    <thead class="thead-styled"> 
     <tr class="centered"> 
      <th>Ingredient</th> 
      <th>Amount</th> 
      <th>Notes</th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody class="formula-body"> 
    </tbody> 
    </table> 

这是我使用的是快递来处理删除请求路由。

途径:

var app = require('express'); 
var router = app.Router(); 
var formulas = require('../data/formula.json'); 

router.get('/formula-api', function(req, res){ 
    res.json(formulas); 
}); 

router.post('/formula-api', function(req, res){ 
    formulas.push(req.body); 
    res.json(formulas); 
}); 

router.delete('/formula-api/:id', function(req, res) { 
    formulas.splice(req.params.id, 1); 
    formulas.push(req.body); 
    res.json(formulas); 
}); 

module.exports = router; 

的POST和GET请求工作得很好,我无法来解决此问题。控制台不会带来任何错误。

我已经将body-parser util导入app.js,所以不应该是个问题。

基本思想是我有一张表格,每次填写表格时都会附加一个新行。

的页面看起来是这样的:

Example table

的想法是,我想要的垃圾桶来删除相应的行让它在每次点击,但现在它什么都不做。

+0

您是否尝试在路由中执行'console.log(req.params);'以确保您收到一个参数? –

+0

@TaylorAckley - 感谢您的评论,将在早上检查确认。 –

回答

0

好的,算出这一个。我的问题是双重的。

1)。当我点击它时,实际上并没有抓住图标,因为我需要在jquery的$('Grab Element')语句中包含两个字体超棒的选择器。 2)。在我的路线部分,我有一条线,指出:

formulas.push(req.body) 

这是推我的空对象回我的JSON数组。

所以要纠正这些错误,我做了以下修改:

涨跌1:

if (e.target.className == 'fa-trash-o') { 

得到了改变:

if (e.target.className == 'fa fa-trash-o') { 

我不知道为什么你可以只是使用一个类作为选择器.....我假设它是Font Awesome特有的东西。 (如果我错了,很乐意得到纠正)。

变化2:

router.delete('/formula-api/:id', function(req, res) { 
    formulas.splice(req.params.id, 1); 
    formulas.push(req.body); 
    res.json(formulas); 
}); 

得到了改变:

router.delete('/formula-api/:id', function(req, res) { 
    formulas.splice(req.params.id, 1); 
    res.json(formulas); 
}); 

这奏效了,一切都COPACETIC。