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); 
}); 
相關問題