через Ajax данные о цене поступают в виде входного текста, но не о цене выбранного продукта, вместо этого всегда указывается только самая первая цена - PullRequest
0 голосов
/ 03 октября 2019

Я подготовил форму регистрации продаж, в которой вы сначала выбираете наименование товара / акций. После того, как этот выбор сделан, он должен заполнить поле под названием unit_selling price ниже ценой этого товара / акции, которую следует извлечь из таблицы запасов в БД. Это происходит частично, так как цена первой акции / продукта выбирается и отображается только в консоли браузера. Помогите мне получить конкретную цену товара и сделать так, чтобы она отображалась в форме не только консоли. Я прикрепил изображение БД.

Create.blade.php

@extends('layouts.app')

@section('content')
    <br>
    <h1>Add Sale</h1>
    {!! Form::open(['action' => 'SalesController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}

    <div class="form-group">
    <label >Product Name</label>
    <select name="product_name" class="form-control" id="stock_name">
        <option>Select Product Name</option>
        @foreach ($stocks as $stock)
            <option value="{{ $stock->stock_name }}" >{{ $stock->stock_name}}</option>
        @endforeach
    </select>
</div>

<script>
    $(document).ready(function() {
        $("#stock_name").on('change', function () {
            let element = $(this);
            $.ajax({
                url: '/sales-price/getunitsellingprice',
                method: 'GET',
                data: {
                    'stock_name' : element.val(),
                },
                success: function (response) {
                       $("#unit_selling_price").val(response);
                },
            });
        });
    });
</script>

<div class="form-group">
    {{Form::label('unit_selling_price', 'Unit Selling Price')}}
    {{Form::text('unit_selling_price', '', ['class' => 'form-control', 'placeholder' => 'Unit Selling Price', 'id' => 'unit_selling_price'])}}
</div>
@endsection

SalesController.php

public function getUnitSellingPrice(Request $request)
    {
        $stock_name = $request->input("stock_name");
        if($stock_name = null){
            return null;
        }
        $stock = Stock::where('stock_name', 'like', "%".$stock_name."%")->first();
        if ($stock == null) {
            return null;
        }
        return response()->json($stock->unit_selling_price);
    }

Снимок экрана БД: таблица запасов

https://slack -files.com / TP02E38GN-FP2G2BM2S-5cb95174a0

Скриншот формы

https://slack -files.com / TP02E38GN-FP287UP55-0e4b4a0261

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Вам нужно попробовать следующий код.

В файле маршрута (web.php)

Route::any('sales-price/getunitsellingprice/{stock_id}','SalesController@getUnitSellingPrice');

В контроллере:

public function getUnitSellingPrice(Request $request, $stock_id)
{

   $stock = Stock::where('stock_id', $stock_id)->first();
   if ($stock == null) {
      return null;
   }

   return response()->json($stock->unit_selling_price);
}

Обновить свой блэйдфайл.

<div class="form-group">
    <label>Product Name</label>
    <select name="product_name" class="form-control" id="stock_name">
    <option>Select Product Name</option>
        @foreach ($stocks as $stock)
        <option value="{{ $stock->stock_id }}">{{ $stock->stock_name}}</option>
        @endforeach
    </select>
</div>

<script>
$(document).ready(function () {
    $("#stock_name").on('change', function () {
    var stock_id = $(this).val();       
        $.ajax({
            //url: MyAppUrlSettings.MyUsefulUrl,
            url: '/sales-price/getunitsellingprice/'+stock_id,
            method: 'GET',              
            success: function (response) {
            console.log(response);
            $("#unit_selling_price").val(response);
            },
        });
    });
});
</script>

Спасибо

1 голос
/ 03 октября 2019

Вы можете опустить триггер здесь. И переписать строку следующим образом:

$("#unit_selling_price").val(response.data);

Также, чтобы получить значение выбранного параметра, вы должны использовать

let element = $(this+' :selected');
...