【问题标题】:Understanding Django/REST/JS code functionality了解 Django/REST/JS 代码功能
【发布时间】:2019-06-05 18:09:34
【问题描述】:

我的网站中有以下代码:

<tr onclick="editUsers(29)" data-id="29">

编辑用户:

function editUsers(id) {
  loadUsers(false, id, showUsers, true);
}

加载用户:

  function loadUsers(insert, id, func_call, html_form) {
  var data = insert ? {insert: true} : {}
  if (html_form)
    data.html_form = true;
    $.ajax({
             type: 'GET',
             url:  '/rest/user/' + id + '/',
             data: data
           })
      .done(function (data) {
        func_call(data, insert, id);
      })
      .fail(function () {
      });
}

当我单击该行时,它应该打开一个界面来编辑所选行/用户,但没有任何反应。我确实在控制台中收到了回复,看起来它应该可以工作,但事实并非如此。有人可以解释为什么它不起作用吗? 有问题的回复:"GET /rest/user/29/?html_form=true HTTP/1.1" 200 3170

我的代码中的其他地方有相同的功能,它添加了一个新用户:

function addUsers() {
  loadUsers(true, 0, showUsers, true);
}
<div class="btn btn-primary pull-right" onclick="addUsers()">Add User</div>

上面的不行,编辑用户也不行。

编辑:showUsers 函数

function showUsers(data, insert, id) {
  var form = $(data),
      $a= form.find('select[name="a"]'),
      $b= form.find('select[name="b"]');
  $a.on("change", function (e) { $b.val($a.val()).trigger('change'); });
  var p    = {
    type:     BootstrapDialog.TYPE_PRIMARY,
    title:    '{% trans "Add User" %}',
    message:  form,
    closable: true,
    cssClass: 'usersDialog',
    buttons:  [
      {
        label:  gettext('Cancel'),
        hotkey: 27,
        action: function (dlg) { dlg.close(); }
      },
      {
        label:    gettext('Save'),
        cssClass: 'btn-primary',
        action:   function (dlg) {
          var data       = form.find('#users-form').serializeForm();
          dlg.close();

          var storeData = function storeData(data) {
            data.html_form = true;
            $.ajax({
                     type:     data.id == '' ? 'POST' : 'PUT',
                     url:      '/rest/user/' + (data.id == '' ? '' : data.id + '/'),
                     data:     data,
                     dataType: 'json',
                     headers:  {'X-CSRFToken': '{{ csrf_token }}'}
                   })
              .done(function (res) {
                //self.updDeviceFields(res);
                if (conflictDialogs.length > 0)
                  storeData(conflictDialogs.pop());
                else
                  location.reload();
                //$.dreamAlert({type: 'success', message: gettext('Changes saved'), position: 'right'});
              }).fail(function (jqXHR, textStatus, errorThrown) {
              console.log([jqXHR.status, jqXHR, textStatus, errorThrown]);
              if (jqXHR.status == 400) {
                p.message = $(jqXHR.responseText);
                form      = p.message;
                currentForm = form;
                currentDialog = BootstrapDialog.show(p);
              }
              else if (jqXHR.status == 500) {
                currentDialog = BootstrapDialog.show(p);
              }
              //$.dreamAlert({type: 'error', message: gettext('Error saving changes'), position: 'right'});
            });
          }
          storeData(data);
        }
      }
    ]
  }
  if (conflictDialogs.length > 0) {
    p.animate = false;
    p.cssClass += ' flip';
  }
  currentDialog = BootstrapDialog.show(p);
  currentForm = form;
}

【问题讨论】:

  • showUsers 是什么?
  • 在 .fail() 上放一个参数,看看它返回什么来理解错误。
  • @DaniloAkamine 我在 .fail() 部分添加了function (jqXHR, textStatus, error)console.log("Post error: " + error);,但我在控制台中什么也没得到,只是与上面相同的响应。
  • 但是这段代码根本没有任何意义。您有一个函数showUsers,您将其作为回调传入,以便在 loadUsers 中的 ajax 响应完成时触发。但是 showUsers 根本不做任何事情来显示用户,而是想尝试在表单上设置侦听器。那么,您究竟希望发生什么,为什么您认为这会奏效?
  • 当我在列表中单击他时,我期望我会得到一个表单来编辑用户的设置。它在控制台中给我的只是一个 GET 请求,但没有任何反应。如果我粘贴 GET 请求的 HTML 部分,则会打开一个表单。我认为它会起作用,但我对它为什么不起作用并没有太多经验。需要做什么?

标签: javascript html django


【解决方案1】:

我在深入研究代码时发现了这一点。原来我有一个语法错误,在编写代码时我完全错过了。

当从不同的页面复制粘贴代码时,我也复制了变量名。我的 HTML 看起来像这样:

<div class="row">
  <div class="col-xs-6">{% render_field foo_form.one bar_style %}</div>
  <div class="col-xs-6">{% render_field foo_form.two bar_style %}</div>
</div>

什么时候应该是这样的:

<div class="row">
  <div class="col-xs-6">{% render_field foo_form.one foo_style %}</div>
  <div class="col-xs-6">{% render_field foo_form.two foo_style %}</div>
</div>

我没有看到重要性的样式,因为它被定义为一个空列表,所以我完全错过了错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2011-04-21
    • 2015-04-17
    • 2016-12-22
    相关资源
    最近更新 更多