2017-03-07 53 views
0

我的快递服务器,deliverCard()方法提供了一些键/值对。为什么我的POST请求触发表达得到

app.get('/', (req, res) => { 
    let card = deck.deliverCard(); 
    console.log('get', card) 
    res.render('layout.ejs', {element:card}); 
}); 

app.post('/', (req, res) => { 
    let card = deck.deliverCard(); 
    console.log('post', card); 
    res.json(card); 
}); 

XMLHttpRequest

function updateCard(value) { 
    let request = new XMLHttpRequest(); 
    let params = JSON.stringify({learned: value}); 

    request.onreadystatechange =() => { 
    if (request.readyState === 4 && request.status === 200) { 
     // Do a thing. 
    } else { 
     console.log('Status ' + request.status + ' text: ' + request.responseText); 
    } 
    } 
    request.open('POST', '/', true); 
    request.setRequestHeader('Content-type', 'application/json'); 
    request.send(params); 
} 

close.addEventListener('click', function() { 
    value = checkbox[0].checked; 
    updateCard(value); 
}); 

我从请求找回正确的请求体,但由于某些原因,在服务器端,则get回调函数被调用。

启动和初始页面加载:

app listening on port 3000! 
get { name: 'div', 
description: 'Defines a generic block of content, that does not carry any semantic value. Used for layout elements like containers.' } 

在请求:

post { name: 'meter', description: 'Defines a horizontal meter.' } 
get { name: 'progress', description: 'Defines a progress bar.' } 

这是因为如果页面被接收到所述响应之后再填装。

+0

您应该考虑使用[摩根(https://github.com/expressjs/morgan)为您的要求作为一个记录器,它在开发中有非常有用的信息,例如方法,路由,状态码,响应大小 –

回答

0

一旦我得到正确的问题,我发现这个答案:How to avoid automatic page reload after XMLHttpRequest call?。我上面的代码中不明显的是,我提交了一个表单。为了防止表单提交的默认操作,我这样做:

close.addEventListener('click', function(e) { 
    e.preventDefault(); 
    value = checkbox[0].checked; 
    updateCard(value); 
}); 
相关问题