node.js - AJAX 调用中断,NodeJS,Express,Handlebars
问题描述
我已经为此工作了几天。我敢肯定它真的很愚蠢,但我已经到了理智的尽头。
公共文件已正确设置。
错误信息:
Uncaught ReferenceError: togDefine is not defined
前端 HTML:
<li class="list-group-item list-group-item-dark">
<div class="row">
<div class="col-md-4"><strong>Heating:</strong> {{#if heating}} {{this.heating}} {{else}} N/A {{/if}}</div>
<div class="col-md-4"><strong>Cooling:</strong> {{#if cooling}} {{this.cooling}} {{else}} N/A {{/if}}</div>
<div class="col-md-4">
<input type="checkbox" id="pvt{{this.id}}" checked="{{this.private}}" onchange="togDefine({{this.id}}, {{this.private}});" data-toggle="toggle" data-on="Private" data-off="Public" data-onstyle="success" data-offstyle="danger" />
</div>
</div>
AJAX 调用:
$(function() {
// Private-Public toggle
let togDefine = (id, pvt) => {
$.ajax({
type: "POST",
url: "/api/pvtToggle",
data: {
id: id,
newState: (pvt === 'true') ? false : true
},
success: function(text) {
if (text === 'ok') {
pvtSuccess(id, pvt);
} else {
console.log('updatePvt failed');
}
}
});
};
let pvtSuccess = (id, pvt) => {
$('#pvt' + id).attr('checked', (pvt === 'true') ? 'false' : 'true');
};
});
后端:
//TOGGLE Private vs Public PROPERTY
app.put('/api/pvtToggle/', isAuthenticated, function(request, response) {
db.Prop.update({
private: request.params.newState
}, {
where: {
id: request.params.id
}
}).then(data => {
response.send('ok');
}).catch(error => {
console.log(error);
});
});
请帮我弄清楚为什么请求不能正常工作。:D
解决方案
您的函数togDefine()
在此块内定义:
$(function() { /* in here */ })
因此,该函数名称仅在该块内可用,对您的 HTML 不可用。因为仅仅定义一个函数实际上并没有执行任何东西,所以实际上没有理由在那种块内定义一个函数,除非你只希望该块内的符号可用。
由于您明确不希望在这里,只需将定义移到该togDefine()
块之外。
推荐阅读
- apache - Apache 2.4 将不带斜杠的目录 URL 重写为 https://default_site/dir/ 而不是保留域
- android - Kotlin Flow - 有什么类似于 LiveData 的 emitSource 的吗?
- c++ - 我的 if 语句没有正确执行(跳过 if)
- reactjs - 如何绑定到挂钩中引发的事件?
- css - 使用转换时结合旋转和翻译时的 Safari 错误
- python - 如何将 Pandas qcut 或类似函数应用于二维数组
- angular - 如何处理 RxJs websocket 连接关闭?在服务器关闭时重试,在客户端关闭时不执行任何操作
- javascript - Javascript InfluxDB-Client 中的“TypeError:t.complete 不是函数”
- html - _reboot.scss 正在覆盖我的自定义 CSS
- ios - 在 Swift 中将计算值作为参数传递