从一个控制器 AJAX 调用不同的函数 LARAVEL



我在一个控制器中有几个函数,例如:

public function cruise($id){...}
public function block($id){...}

在网络中.php我添加了路由:

Route::post('/profile/{cruise}', 'UtilityController@cruise');
Route::post('/profile/{block}', 'UtilityController@block');

在我的刀片中的 ajax 中:

function block() {
$.ajax({
type: 'POST',
url: "{{route('profile', $user->id)}}",   // PROBLEM HERE
dataType: 'JSON',
data: {formData: $data},
success: function ($data) {
console.log('status = ' + status);
},
error: function (json) {
console.log(json);
},
})
}

如何在 ajax 中从控制器定义特定的函数路由?

问题是您对 2 种不同的控制器方法具有相同的路由

Route::post('/profile/{cruise}', 'UtilityController@cruise');
Route::post('/profile/{block}', 'UtilityController@block');

当你写Route::post('/profile/{cruise}',...这部分时{between_curly_braces}是一个通配符。换句话说,它只是 Laravel 将为您发送的值分配的变量的名称......

在您的情况下,它是$user->id的,无论您做什么,它都将始终命中路由文件中对应于该结构的第一个路由post('/profile/{ }

为了使它起作用,以便您可以在控制器中点击不同的方法,您必须分离路由以命中不同的方法。在路由文件中创建以下 2 个路由:

Route::post('/profile-cruise/{cruise}', 'UtilityController@cruise')->name('profile.cruise');
Route::post('/profile-block/{block}', 'UtilityController@block')->name('profile.block');

在 Ajax 函数中,命中所需的路由如下:

function cruise() {
$.ajax({
type: 'POST',
url: "{{route('profile.cruise', $user->id)}}",
dataType: 'JSON',
data: {formData: $data},
success: function ($data) {
console.log('status = ' + status);
},
error: function (json) {
console.log(json);
},
})
}

对于巡航:

function block() {
$.ajax({
type: 'POST',
url: "{{route('profile.block', $user->id)}}",
dataType: 'JSON',
data: {formData: $data},
success: function ($data) {
console.log('status = ' + status);
},
error: function (json) {
console.log(json);
},
})
}

您将无法导致路线发生冲突

最新更新