#php #ajax #laravel #controller #laravel-8
Вопрос:
Я новичок в laravel и хочу отправить выбранное значение раскрывающегося списка названия продукта через данные ajax контроллеру
Например: Если я выбираю значение параметра 1-го пластикового изделия из раскрывающегося списка, то в контроллере из объекта запроса я хочу, чтобы это выбранное название продукта
в соответствии с приведенным ниже кодом я получаю значение null в объекте запроса названия продукта
Вот мой маршрут:
Route::get('product', 'ProductController@index')->name('product');
Вот мой контроллер:
public function index(Request $request)
{
if (isset($request->productName)) {
$productName = $request->productName;
dump($productName); // getting null
} else {
$productName = null;
}
return view('Product.product');
}
Вот мой вызов ajax:
function display(productName){
productName = $('#product_filter').val(); // Here, I'm getting selected value of dropdown
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: "{{route('product')}}",
type: "GET",
data:{
'productName' : productName // in header request I'm getting value [productName: plastic product] *
},
success:function(data){
console.log(data);
},
error:function(e){
console.log(e,'error');
}
});
}
Я не знаю, делаю ли я что-то не так, заканчивается желанием получить помощь от рук помощи, пожалуйста, помогите мне передать выбранное значение объекту контроллера
Комментарии:
1. Я считаю, что вы не можете просто
{{ route('dashboard-product-data') }}
использовать javascript, так как он не знает, как его анализировать. Пожалуйста, проверьте свою панель ответов и посмотрите, что вы получаете по URL-адресу.2. @Ryoko, Спасибо, что ответили в соответствии с вашим предложением, я проверил панель ответов, это то, что я получаю в URL
url: "http://localhost.product.com/dashboard/product-data"
, Не могли бы вы, пожалуйста, помочь мне с этим, как я могу это проанализировать?3. Ладно, похоже, это работает. Попытайтесь измениться
isset
с$request->has('productName')
иdump
доdd
. Что ты получаешь?4. @ryoko я получаю ноль, пока dd();
5. @Ryoko, я внес почти все изменения для этого, и половина вечера прошла, чтобы получить это, не могли бы вы, пожалуйста, помочь мне с этим?
Ответ №1:
Я считаю, что вы получили null
, потому что возвращаете полный HTML-код в запрос Ajax. Чтобы получить полезную нагрузку, отправленную из Ajax, вы должны вернуть ответ JSON, подобный этому:
public function index(Request $request)
{
$productName = null;
if (isset($request->productName)) {
$productName = $request->productName;
}
return response()->json($productName);
}
Тем не менее, я не могу воспроизвести проблему, не увидев, как вы вызываете метод и куда бы вы показали данные. И я предполагаю, что вы хотите просто сделать console.log(data)
то, что вы сделали в данном фрагменте. В этом случае приведенный выше фрагмент будет работать.
И если вы хотите сохранить представление, чтобы предотвратить ошибку при обновлении страницы, просто добавьте новый метод для этого конкретного вызова в своем контроллере и отправьте запрос на эту конечную точку, вот так:
web.php
<?php
Route::get('/', [ProductController::class, 'index']);
Route::get('/productFilter', [ProductController::class, 'productFilter'])->name('dashboard-product-data');
ProductController.php
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ProductController extends Controller
{
public function index(Request $request)
{
return view('welcome');
}
public function productFilter(Request $request)
{
$productName = null;
if (isset($request->productName)) {
$productName = $request->productName;
}
return response()->json($productName);
}
}
welcome.blade.php
<div>Product Name: <span id="product-name"></span></div>
<select id="product_filter" name="product_filter">
<option value="plastic product">plastic product</option>
</select>
<button id="submit-button" type="button">Send data</button>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj 3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
function display(productName){
productName = $('#product_filter').val(); // Here, I'm getting selected value of dropdown
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: "{{route('dashboard-product-data')}}",
type: "GET",
data:{
'productName' : productName // in header request I'm getting value [productName: plastic product] *
},
success:function(data){
console.log(data);
document.querySelector('#product-name').innerHTML = data
},
error:function(e){
console.log(e,'error');
}
});
}
const submitButton = document.querySelector('#submit-button')
submitButton.addEventListener('click', () => display())
</script>