0

我有一个使用 Ajax 提交post data到数据库的表单,如下所示:

function markAsRead(id) {
    console.log('Triggered');
    $.ajax({
        type: 'POST',
        url: '/admin/assessment.html',
        data: id,
        success: function(data) {
            if (data.error) {
                console.log('We had an error.');
            } else if (data.success) {
                console.log('Marker updated.');
            }
        }
    })
}

(function() {
    var element = document.getElementsByName('markAsRead');
    for(var i = 0; i < element.length; i += 1) {
        element[i].addEventListener('click', function(e)  { e.preventDefault;
            markAsRead(this.getAttribute('data-value'));
        });
    }
})();

我的页面上有多个锚点,例如:

<a href="#" name="markAsRead" data-value="5135135">Mark As Read</a>

我只是想知道,Node.js我该如何解析这些数据,我试过了:

var id = req.body.markAsRead;

  console.log('Data is ' + id);

但它只是说未定义。有关如何解析此请求数据的任何信息都会很好。谢谢!(Anchor不在任何形式内)

4

1 回答 1

1

首先,您应该使用命名参数或比字符串更结构化的东西从客户端发布数据。

$.ajax({
    type: 'POST',
    url: '/admin/assessment.html',
    data: { id: id },
    success: function(data) {
        if (data.error) {
            console.log('We had an error.');
        } else if (data.success) {
            console.log('Marker updated.');
        }
    }
})

其次,当您在节点端解析 req.body 时,您正在解析作为请求正文发送的字符串,其中包括您的参数{ id: 'somevalue' }。你可以自己解析这个,但我猜你在node 的 http.Server 实现之上使用express或其他抽象,它支持中间件堆栈。我建议使用connect bodyParser()中间件,它将 req.body 字符串转换为具有已发布属性的对象。这将使req.body.id在节点的请求处理程序中对您可用。

于 2013-04-12T02:28:19.110 回答