$(function () {
$('#barcode-form').on('submit', function (e) {
$.ajax({
type: 'post',
url: '<?= Url::to(['/sales/cart-barcode']) ?>',
data: $('#barcode-form').serialize(),
success: function () {
$( '#barcode-form' ).each(function(){this.reset();});
document.getElementById("pcode").focus();
}
});
});
});
Это функция jQuery AJAX, и она работает хорошо, но занимает около 2700 мс, что неприемлемо для любого клиента.
<form id="barcode-form">
<?php
$a=array();
foreach ($productsAvailable as $product){
array_push($a,$product->product_code);
}
echo TypeaheadBasic::widget([
'name' => 'pcode',
'id' => 'pcode',
'data' => $a,
'options' => ['placeholder' => 'Filter as you type ...'],
'pluginOptions' => ['highlight'=>true],
]);
?>
<input type="submit" hidden/>
</form>
В бэкэнде я получаю данные запроса AJAX и редактирую свою таблицу, как показано в этом действии:
public function actionCartBarcode() {
$request = Yii::$app->request;
$productCode = $request->getBodyParam('pcode');
$invoice = Invoice::find()->where(['status' => 1])->one();
$invoiceId = $invoice->invoice_id;
$product = AppProduct::find()->where(['product_code' => $productCode])->one();
$productId = $product->product_id;
//first see if product exist (change sales to cart after you create the cart table)
$model = Sales::find()->where(['r_product_id' => $productId])->andWhere(['r_invoice_id' => $invoiceId])->one();
if ($model) {
$model->sold_product_qty += 1;
} else {
$model = new Sales();
$model->r_invoice_id = $invoiceId;
$model->r_product_id = $productId;
$model->sold_product_qty = 1;
$model->discount = 0;
$model->price_per_unit = $product->product_price;
$model->total_price = $product->product_price;
$model->profit = $product->product_price - $product->product_cost;
}
if ($model->save()) {
return 1;
} else {
VarDumper::dump($productId, 10, true);
die();
}
}
У кого-нибудь есть идея?