【发布时间】: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