Запрос Laravel Ajax не работает с контроллером

введите описание изображения здесь

введите описание изображения здесь

Я использую laravel 4..2 и имею функцию html onchange, такую ​​как изображение. И показывая мне ошибку как второе изображение.

Этот запрос AJAX не работает на методе создания, но работает над методом индекса контроллера ресурсов laravel.

Это происходит из-за контроллера laravel. Может ли кто-нибудь помочь мне, объяснив это.

// Routes.php Route::resource('index', 'IndexController'); Route::get('ajax-subcat', function(){ $cat_id = Input::get('cat_id'); $subcategories = Subcategory::where('parent_ID', '=', $cat_id)->get(); return Response::json($subcategories); }); // AJAX <script> $('#category').on('change', function(e){ console.log(e); var cat_id = e.target.value; // AJAX $.get('ajax-subcat?cat_id=' + cat_id, function(data){ $('#subcategory').empty(); $.each(data, function(index, subcatObj){ $('#subcategory').append('<option value="'+subcatObj.id+'">'+subcatObj.name+'</option>') }); // console.log(data); }); }); </script> 

Поскольку вы используете Laravel, давайте начнем использовать laravel в полной мере:

В Routes.php создайте:

  Route::get('ajax-subcat/{id}', 'SOME_CONTROLLER_NAME@SOME_METHOD_NAME'); 

«{id}» сообщает laravel для хранения сведений о том, что происходит после «/» в переменной, и передать его указанному методу контроллеров. Нет ничего более уродливого, чем наличие ajax-subcat = cars в URL-адресе. Также замените SOME_METHOD_NAME и SOME_CONTROLLER_NAME на правильные имена.

В своем контроллере добавьте:

 public function THAT_METHOD_NAME_FROM_THE_ROUTE($id){ $subcategories = Subcategory::where('parent_ID', '=', $id)->get(); return Response::json($subcategories); } 

И в вашем сценарии Ajax

  <script> $('#category').on('change', function(e){ console.log(e); var cat_id = e.target.value; // AJAX $.get('ajax-subcat/' + cat_id, function(data){ $('#subcategory').empty(); $.each(data, function(index, subcatObj){ $('#subcategory').append('<option value="'+subcatObj.id+'">'+subcatObj.name+'</option>') }); // console.log(data); }); }); </script>