ajax in laravel 用于创建和更新
ajax in laravel for create and update
我在 laravel 中使用 ajax 作为 crud。更新或添加数据时,将新行添加到列表但 return 字符串 'undefined' 刷新此页面时显示真实文本。
如何解决这个问题?
控制器:
public function update(Request $request, $user_id)
{
$user = User::where('id', $user_id)->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
$user = DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
} else {
$user = DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
}
return response()->json($user);
}
查看:
@foreach ($users as $user)
<tr id="user{{$user->id}}" class="active">
<td>{{$user->name}}</td>
<td>{{$user->email}}</td>
<td>{{ $user->hasRole('admin') ? 'Admin' : 'Author' }}</td>
<td width="35%">
<button class="btn btn-warning btn-detail open_modal" value="{{$user->id}}"> Edit </button>
<button class="btn btn-danger btn-delete delete-user" value="{{$user->id}}"> Delete </button>
</td>
</tr>
@endforeach
ajax
的js代码
$(document).ready(function(){
//get base URL *********************
var url = $('#url').val();
//display modal form for creating new user *********************
$('#btn_add').click(function(){
$('#btn-save').val("add");
$('#frmusers').trigger("reset");
$('#myModal').modal('show');
});
//display modal form for user EDIT ***************************
$(document).on('click','.open_modal',function(){
var user_id = $(this).val();
// Populate Data in Edit Modal Form
$.ajax({
type: "GET",
url: url + '/' + user_id,
success: function (data) {
console.log(data);
$('#user_id').val(data.id);
$('#name').val(data.name);
$('#password').val(data.password);
$('#email').val(data.email);
$('#btn-save').val("update");
$('#myModal').modal('show');
},
error: function (data) {
console.log('Error:', data);
}
});
});
//create new user / update existing user ***************************
$("#btn-save").click(function (e) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
e.preventDefault();
var formData = {
name: $('#name').val(),
email: $('#email').val(),
password: $('#password').val(),
role: $('#role').val(),
}
//used to determine the http verb to use [add=POST], [update=PUT]
var state = $('#btn-save').val();
var type = "POST"; //for creating new resource
var user_id = $('#user_id').val();;
var my_url = url;
if (state == "update"){
type = "PUT"; //for updating existing resource
my_url += '/' + user_id;
}
console.log(formData);
$.ajax({
type: type,
url: my_url,
data: formData,
dataType: 'json',
success: function (data) {
console.log(data);
var user = '<tr id="user' + data.id + '"><td>' + data.name + '</td><td>' + data.email + '</td><td>' + data.role + '</td>';
user += '<td><button class="btn btn-warning btn-detail open_modal" value="' + data.id + '">ویرایش</button>';
user += ' <button class="btn btn-danger btn-delete delete-user" value="' + data.id + '">حذف</button></td></tr>';
if (state == "add"){ //if user added a new record
$("#users-list").append(user);
}else{ //if user updated an existing record
$("#user" + user_id).replaceWith( user );
}
$('#frmusers').trigger("reset");
$('#myModal').modal('hide')
},
error: function (data) {
console.log('Error:', data);
}
});
});
//delete user and remove it from TABLE list ***************************
$(document).on('click','.delete-user',function(){
var user_id = $(this).val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
$.ajax({
type: "DELETE",
url: url + '/' + user_id,
success: function (data) {
console.log(data);
$("#user" + user_id).remove();
},
error: function (data) {
console.log('Error:', data);
}
});
});
});
................................................ ..................................................... ..................................................... .....................................
更新方法 returns 布尔值,所以基本上在所有 3 个块中,您将 $user 设置为布尔值而不是对象。
所以利用 tap() 函数
public function update(Request $request, $user_id)
{
$user = tap(User::where('id', $user_id)->first())
->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
} else {
DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
}
//Or you can fetch the user record again User::find($user_id);
//if you are not using tap()
return response()->json($user->fresh());
}
如何解决存储方法中的这个问题?
public function store(Request $request)
{
$userAuth = auth()->user();
if($userAuth->hasRole('admin')){
$user = User::insertGetId([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
$user = DB::table('model_has_roles')->insert([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user,
]);
} else {
$user = DB::table('model_has_roles')->insert([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user,
]);
}
return response()->json($user);
}
我在 laravel 中使用 ajax 作为 crud。更新或添加数据时,将新行添加到列表但 return 字符串 'undefined' 刷新此页面时显示真实文本。
如何解决这个问题?
控制器:
public function update(Request $request, $user_id)
{
$user = User::where('id', $user_id)->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
$user = DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
} else {
$user = DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
}
return response()->json($user);
}
查看:
@foreach ($users as $user)
<tr id="user{{$user->id}}" class="active">
<td>{{$user->name}}</td>
<td>{{$user->email}}</td>
<td>{{ $user->hasRole('admin') ? 'Admin' : 'Author' }}</td>
<td width="35%">
<button class="btn btn-warning btn-detail open_modal" value="{{$user->id}}"> Edit </button>
<button class="btn btn-danger btn-delete delete-user" value="{{$user->id}}"> Delete </button>
</td>
</tr>
@endforeach
ajax
的js代码$(document).ready(function(){
//get base URL *********************
var url = $('#url').val();
//display modal form for creating new user *********************
$('#btn_add').click(function(){
$('#btn-save').val("add");
$('#frmusers').trigger("reset");
$('#myModal').modal('show');
});
//display modal form for user EDIT ***************************
$(document).on('click','.open_modal',function(){
var user_id = $(this).val();
// Populate Data in Edit Modal Form
$.ajax({
type: "GET",
url: url + '/' + user_id,
success: function (data) {
console.log(data);
$('#user_id').val(data.id);
$('#name').val(data.name);
$('#password').val(data.password);
$('#email').val(data.email);
$('#btn-save').val("update");
$('#myModal').modal('show');
},
error: function (data) {
console.log('Error:', data);
}
});
});
//create new user / update existing user ***************************
$("#btn-save").click(function (e) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
e.preventDefault();
var formData = {
name: $('#name').val(),
email: $('#email').val(),
password: $('#password').val(),
role: $('#role').val(),
}
//used to determine the http verb to use [add=POST], [update=PUT]
var state = $('#btn-save').val();
var type = "POST"; //for creating new resource
var user_id = $('#user_id').val();;
var my_url = url;
if (state == "update"){
type = "PUT"; //for updating existing resource
my_url += '/' + user_id;
}
console.log(formData);
$.ajax({
type: type,
url: my_url,
data: formData,
dataType: 'json',
success: function (data) {
console.log(data);
var user = '<tr id="user' + data.id + '"><td>' + data.name + '</td><td>' + data.email + '</td><td>' + data.role + '</td>';
user += '<td><button class="btn btn-warning btn-detail open_modal" value="' + data.id + '">ویرایش</button>';
user += ' <button class="btn btn-danger btn-delete delete-user" value="' + data.id + '">حذف</button></td></tr>';
if (state == "add"){ //if user added a new record
$("#users-list").append(user);
}else{ //if user updated an existing record
$("#user" + user_id).replaceWith( user );
}
$('#frmusers').trigger("reset");
$('#myModal').modal('hide')
},
error: function (data) {
console.log('Error:', data);
}
});
});
//delete user and remove it from TABLE list ***************************
$(document).on('click','.delete-user',function(){
var user_id = $(this).val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
$.ajax({
type: "DELETE",
url: url + '/' + user_id,
success: function (data) {
console.log(data);
$("#user" + user_id).remove();
},
error: function (data) {
console.log('Error:', data);
}
});
});
});
................................................ ..................................................... ..................................................... .....................................
更新方法 returns 布尔值,所以基本上在所有 3 个块中,您将 $user 设置为布尔值而不是对象。
所以利用 tap() 函数
public function update(Request $request, $user_id)
{
$user = tap(User::where('id', $user_id)->first())
->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
} else {
DB::table('model_has_roles')->where('model_id', $user_id)->update([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user_id,
]);
}
//Or you can fetch the user record again User::find($user_id);
//if you are not using tap()
return response()->json($user->fresh());
}
如何解决存储方法中的这个问题?
public function store(Request $request)
{
$userAuth = auth()->user();
if($userAuth->hasRole('admin')){
$user = User::insertGetId([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => Hash::make($request->input('password')),
]);
if ($request->input('role') == 'admin'){
$user = DB::table('model_has_roles')->insert([
'role_id' => 2,
'model_type' => 'App\User',
'model_id' => $user,
]);
} else {
$user = DB::table('model_has_roles')->insert([
'role_id' => 1,
'model_type' => 'App\User',
'model_id' => $user,
]);
}
return response()->json($user);
}