我正在尝试通过laravel中的ajax将动态生成的数据发送到控制器。当用户从下拉菜单中选择一个选项时,则应将所选选项和其他数据一起发送到控制器。
当从下拉列表中选择一个选项时,我尝试将数据发送到控制器。但是每次我尝试此错误时,
Symfony \组件\ HttpKernel \ Exception \ MethodNotAllowedHttpException 并在错误中 REQUEST_METHOD为GET
这是我调用ajax函数的地方
$(document).on('change', '.route-code-selector', function() {
var selectorID = $(this).attr('id');
addRoutePlanDetails(selectorID);
});
AJAX功能
function addRoutePlanDetails(selectorID) {
var routePlanCode = document.getElementById("routeplanno").value;
var driver = $("#selectDriver").val().split('|');
var salesman = $("#selectSalesman").val().split('|');
var router_01 = $("#selectRouter01").val().split('|');
var router_02 = $("#selectRouter02").val().split('|');
var vehicle_no = document.getElementById("enterVehicleNo").value;
var route_code = document.getElementById(selectorID).value;
var date = document.getElementById("date").value;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
$.ajax({
url: 'addNewRoute',
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
}
路线
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
Route::get ('route-plan', 'RoutePlanController@index');
Route::get ('excludePorterRes', 'RoutePlanController@excludePorterRes');
Route::get ('retreiveRouteData', 'RoutePlanController@retrieveRouteCodeData');
Route::get ('retreiveUserData', 'RoutePlanController@retreiveUserData');
Route::get ('retreiveNewRouteData', 'RoutePlanController@retreiveNewRouteData');
Route::post('addNewRoute', [
'uses' => 'RoutePlanController@insertNewRoute',
'as' => 'addNewRoute'
]);
});
控制器
public function insertNewRoute(){
$routeplan = new Routeplan;
$user_email = auth()->user()->email;
$routeplan->RouteplanCode = Input::get('routePlanCode');
$routeplan->RouteCode = Input::get('route_code');
$routeplan->DriverID = Input::get('driver');
$routeplan->SalesmanID = Input::get('salesman');
$routeplan->Routercode1 = Input::get('router_01');
$routeplan->Routercode2 = Input::get('router_02');
$routeplan->VehicleNo = Input::get('vehicle_no');
$routeplan->Date = Input::get('date');
$routeplan->Createuser = $user_email;
$routeplan->Status = 'TEMP';
$routeplan->save();
}
当用户选择一个选项时,所有数据都应存储在数据库中。
答案 0 :(得分:0)
尝试一次
url: '{{ route('addNewRoute') }}',
答案 1 :(得分:0)
问题在这里:
url: 'addNewRoute',
在这里您以错误的方式呼叫路线,请按照以下方式使用它:
url: '{{ url('admin/addNewRoute') }}',
您必须调用url()
方法,以便它可以创建正确的url格式,并且不要忘记addNewRoute
被分组在admin
下,因此必须将其附加到调用时。
答案 2 :(得分:0)
您已使用@Provider
public class CustomHandler implements ExceptionMapper<Exception>
{
public Response toResponse(Exception ex)
{
if(ex instanceOf ConstraintViolationException)
{
Do something
}
}
作为路线。因此,您在组中的所有路线都是prefix
。
因此,在prefix/uri
通话中,您应该ajax
并将url: '{{ url('admin/addNewRoute') }}',
更改为method
type
在 $.ajax({
url: '{{ url('admin/addNewRoute') }}',
type: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
中指定ajax
时使用HTTP Verb
而不是type
。
答案 3 :(得分:0)
如果ajax方法在外部javascript文件中运行,则应在blade
(通常是布局刀片)中定义一个url变量,该变量用作ajax调用方法上的ajax请求url。 (在加载.js文件之前);
示例var url = '{{ route('addNewRoute') }}'
$.ajax({
url: url',
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
如果您在刀片服务器中使用ajax,则可以直接将route
用作ajax请求网址。
$.ajax({
url: "{{ route('addNewRoute') }}",
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
答案 4 :(得分:0)
您在路线中忘记了/
。
Route::group(['prefix' => 'admin'], function () {
在/
中添加admin/
Route::group(['prefix' => 'admin/'], function () {
然后您可以在ajax中尝试
url: '{{ url('admin/addNewRoute') }}',
或
url: 'admin/addNewRoute',
尝试一下是否可行。
答案 5 :(得分:0)
如果您的脚本位于刀片文件中,请使用route()
在ajax中设置url:
$.ajax({
url: '{{route('addNewRoute')}}',
method: 'POST',
dataType: 'json',
...
});
答案 6 :(得分:0)
尝试一下:
请使用 url:'{{route('addNewRoute')}}'代替url:'addNewRoute'。
答案 7 :(得分:0)
正如你们中许多人所说的那样。我改变了方法的类型,但仍然无法正常工作。但是后来我查看了laravel日志(存储/日志),从日志中发现我的某些控制器语法不正确。这就是为什么它仍然给我500错误的原因。之后,我更改了语法并进行了更正。有效 !!无论如何,感谢你们的帮助!即使您的ajax正确,如果有人遇到此错误,请查看laravel日志。希望对您有所帮助。