AJAX 调用中断,NodeJS、Express、Handlebars
AJAX call is broken, NodeJS, Express, Handlebars
我已经为此工作了几天。我确定这真的很愚蠢,但我已经快疯了。
public 文件设置正确。
错误信息:
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()
的定义移到该块之外。
我已经为此工作了几天。我确定这真的很愚蠢,但我已经快疯了。
public 文件设置正确。
错误信息:
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()
的定义移到该块之外。