【发布时间】:2022-08-14 16:39:49
【问题描述】:
我正在使用 Laravel 8,并尝试使用 Ajax 请求来显示我的表的结果:
$.ajax({
url: \"{{url(\'/admin/users/order-by\')}}\",
type: \"POST\",
data: {
order_by: orderBy,
_token: \'{{csrf_token()}}\'
},
dataType: \'json\',
success: function (result) {
var userList = document.getElementById(\"user-list\");
$(\'#contentDiv\').show();
$.each(result.orderby, function (key, value) {
$(\"#user-list\").append(\'<tr><td>\' + value.id + \'</td> <td>\' + value.name + \'</td> <td>\' + value.email + \'</td> <td>\' + value.is_active + \'</td><td class=\"d-flex\"><div class=\"btn-group\"></div></td></tr>\');
});
}
});
所以基本上它会将一些新行附加到表中。
实际上在最后一个<td class=\"d-flex\"></td>,我想使用一些按钮,如下所示:
@if(!$user->isSameUser($user->id))
<td class=\"d-flex\">
<div class=\"btn-group\">
<a href=\"{{ route(\'admin.users.edit\' , [\'user\' => $user->id]) }}\" class=\"btn btn-sm btn-purple\">Accesses</a>
<a href=\"{{ route(\'admin.users.edit\' , [\'user\' => $user->id]) }}\" class=\"btn btn-sm btn-info\">Money Wallet</a>
<a href=\"{{ route(\'admin.users.edit\' , [\'user\' => $user->id]) }}\" class=\"btn btn-sm btn-warning\"> View Information</a>
<a href=\"{{ route(\'admin.users.edit\' , [\'user\' => $user->id]) }}\" class=\"btn btn-sm btn-navy\">Edit Profile</a>
<form id=\"delForm\" action=\"{{ route(\'admin.users.destroy\' , [\'user\' => $user->id]) }}\" method=\"POST\">
@csrf
@method(\'DELETE\')
<button type=\"button\" class=\"button btn btn-sm btn-orange ml-1\" onclick=\"this.classList.toggle(\'button--loading\')\" id=\"btn-submit\" type=\"submit\" data-name=\"{{ $user->name }}\" >
<span class=\"button__text\">Delete</span>
</button>
</form>
</div>
</td>
@endif
现在为了在 Ajax 响应中显示这些数据,我需要添加:
...<td class=\"d-flex\"><div class=\"btn-group\">__BUTTONS GOES HERS__</div></td></tr>\');
但不知道如何将指定的代码与 Ajax 响应连接起来。
更新 1
我终于可以成功地将按钮传递给表格行。
但这里唯一的问题是它不读取 JavaScript 中的用户 id 变量:
@push(\'scripts\')
$(\"#dropdown-list\").on(\'change\', function(){
var orderBy = document.getElementById(\"dropdown-list\").value;
$(\'#contentDiv\').hide();
$(\"#user-list\").html(\'\');
if(orderBy == \'asc\')
{
var orderBy = 1;
} else if(orderBy == \'desc\')
{
var orderBy = 2;
}
const url1 = \"{{ route(\'admin.users.permissions\' , [\'user\' => \'__USER_ID__\']) }}\"
const url2 = \"{{ route(\'admin.users.wallet\' , [\'user\' => \'__USER_ID__\']) }}\"
const url3 = \"{{ route(\'admin.users.info\' , [\'user\' => \'__USER_ID__\']) }}\"
const url4 = \"{{ route(\'admin.users.edit\' , [\'user\' => \'__USER_ID__\']) }}\"
$.ajax({
url: \"{{url(\'/admin/users/order-by\')}}\",
type: \"POST\",
data: {
order_by: orderBy,
_token: \'{{csrf_token()}}\'
},
dataType: \'json\',
success: function (result) {
$(\'#contentDiv\').show();
$.each(result.orderby, function (key, value) {
const $row = $(\'<tr />\');
$row.append(\'<td>\' + value.id + \'</td>\');
$row.append(\'<td>\' + value.name + \'</td>\');
$row.append(\'<td>\' + value.email + \'</td>\');
$row.append(\'<td>\' + value.is_active + \'</td>\');
const $btn_grp = $(\'<td class=\"d-flex\"><div class=\"btn-group\" />\');
$btn_grp.append(\'<a href=\"\' + url1.replace(\'__USER_ID__\', \'{!! $user->id !!}\') + \'\" class=\"btn btn-sm btn-purple\">Permissions</a>\');
$btn_grp.append(\'<a href=\"\' + url2.replace(\'__USER_ID__\', \'1\') + \'\" class=\"btn btn-sm btn-info\">Wallet</a>\');
$btn_grp.append(\'<a href=\"\' + url3.replace(\'__USER_ID__\', \'1\') + \'\" class=\"btn btn-sm btn-warning\">Information</a>\');
$btn_grp.append(\'<a href=\"\' + url4.replace(\'__USER_ID__\', \'1\') + \'\" class=\"btn btn-sm btn-navy\">Edit</a>\');
const $btn_close = $(\'</div></td></tr>\');
$btn_grp.append($btn_close);
$row.append($btn_grp);
$(\"#user-list\").append($row);
});
}
});
@endpush
@component(\'admin.layouts.content\' , [\'title\' => \'Users List\'])
...
@endcomponent
如您所见,我尝试像这样传递用户变量 id:
$btn_grp.append(\'<a href=\"\' + url1.replace(\'__USER_ID__\', \'{!! $user->id !!}\') + \'\" class=\"btn btn-sm btn-purple\">Permissions</a>\');
但不知何故我得到未定义变量:用户错误:
那么这里出了什么问题?如何正确传递变量?
-
如果您的 if 条件失败怎么办?你想把什么放在其他条件下?
-
@DineshParmar 如果他是同一个登录用户,那么按钮组将不会显示给他。这里的主要问题是别的!
-
您可以尝试从 AJAX 返回刀片组件/视图并将其附加到表中。
-
简单的方法是在 Ajax 响应中返回带有预期 HTML 的刀片/视图,并将其附加到表中的合适位置。
标签: javascript php ajax laravel laravel-8