Estoy implementando el filtrado de productos para mi proyecto. Funciona correctamente en product.main.blade . Pero al hacerlo en product.list.blade con la misma estructura de código, el sistema da el error "SyntaxError: Token inesperado < en JSON en la posición 0". Por lo que sé, la causa es que los datos no son del tipo JSON. Creo que el problema radica en las rutas que hacen que no se envíen los datos. Entonces, ¿alguien puede ayudarme a solucionarlo? ¡Muchas gracias!
Mi controlador :
function ajax_sort(Request $request) { $cat_id = $request->cat_id; $select = $request->sort; $data=array( 'cat_id'=>$cat_id, 'select'=>$select ); echo json_encode($data); }codigo jquery :
$("form select").change(function() { var cat_id = $("#cat-tilte").attr('data-id'); var sort = $(this).val(); var data = { cat_id, sort: sort }; $.ajax({ url: "ajax_sort", method: 'GET', data: data, dataType: 'json', success: function(data) { console.log(data); }, error: function(xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); });Y las rutas que configuré :
Route::get('product/list/{cat_id}',[ProductController::class,'list']); Route::get('product/main',[ProductController::class,'main']); Route::get('product/ajax_sort',[ProductController::class,'ajax_sort']);Editar : el motivo es que la URL y la ruta son incorrectas, lo he solucionado.
Parece que te has perdido esta parte en tu código:
var data = { cat_id:cat_id, sort: sort };Encontré el error en la url:
$("form select").change(function() { var cat_id = $("#cat-tilte").attr('data-id'); var sort = $(this).val(); var url = route('product.ajax_sort', cat_id); var data = { sort: sort }; console.log(url); $.ajax({ url: url, method: 'GET', data: data, dataType: 'json', success: function(data) { $(".result-sort").html(data.result); }, error: function(xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); });