【问题标题】:AJAX call is broken, NodeJS, Express, HandlebarsAJAX 调用中断,NodeJS,Express,Handlebars
【发布时间】:2020-08-22 12:44:13
【问题描述】:

我已经为此工作了几天。我敢肯定它真的很愚蠢,但我已经到了理智的尽头。

公共文件设置正确。

错误信息:

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

【问题讨论】:

    标签: node.js ajax express handlebars.js


    【解决方案1】:

    你的函数togDefine()在这个块中定义:

    $(function() { /* in here */ })
    

    因此,该函数名称仅在该块内可用,而对您的 HTML 不可用。因为仅仅定义一个函数实际上并没有执行任何事情,所以没有理由在那种块内定义一个函数,除非你只希望该块内的符号可用。

    由于您明确不希望在此处这样做,因此只需将 togDefine() 的定义移到该块之外。

    【讨论】:

    • 好的,这样就解决了第一个问题。现在我收到此错误: POST 127.0.0.1:8080/api/pvtToggle 404 (Not Found) 如果您对此有任何想法,我将不胜感激。 :)
    • @Eric - 您应该使用的服务器代码用于 PUT,而不是 POST。该代码还需要在.catch() 中将响应发送回客户端。
    • 非常感谢,你是个传奇!
    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多