【发布时间】:2019-07-12 01:09:26
【问题描述】:
我想在将新产品上传到数据库的表单上调用 ajax 函数。 即使我在 script.js 中禁用了事件的默认行为,由于 router.post() 方法,页面仍然会刷新。
我的 index.js(后端):
router.post('/dashboard', (req, res) => {
const{name, pricePerUnit, productDescription, productAmmount} = req.body;
let errors = [];
console.log(global.useremail);
//Check required fields
if(!name || !pricePerUnit || !productDescription || !productAmmount){
errors.push({msg : "Enter all fields"});
}
if(errors.length > 0){
res.render('dashboard', {
name,
pricePerUnit,
productDescription,
productAmmount,
errors,
});
}else{
//Add record
}
});
我的 script.js(前端):
$(document).ready(()=>{
$('#submitNewProduct').submit((e)=>{
e.preventDefault();
const data = getFormDataAsJSON($('newproduct-form'));
$.ajax({
type: 'post',
url: '/dashboard',
data: data,
dataType: 'json'
});
});
});
【问题讨论】:
-
我认为是因为你在节点中渲染了
view。你可能只需要res.send({"your json"})或res.json("your json") -
旁注 - 这看起来不对:
$('newproduct-form') -
“即使我在 script.js 中禁用了事件的默认行为,由于 router.post() 方法,页面仍然会刷新。” 不,那是不是为什么。响应无法到达并更改页面对其的处理方式。如果页面正在刷新,那是因为没有阻止表单提交。逐步检查客户端代码以了解原因。
-
如果我做 res.send({'my jason'}) 页面会输出一个 json 文件,它不会更新同一个页面。
-
唯一改变前端(和后端)表单的代码行是我发布的那些。所以我相信即使我试图阻止客户端刷新,服务器端仍然会推送刷新吗?
标签: javascript node.js ajax express