阿贾克斯偶尔也不会工作。它取决于浏览器?

时间:2017-06-03 13:57:18

标签: php jquery ajax symfony datatables

我的购物车系统存在很大问题。问题是当我选择产品并尝试通过ajax发送到服务器端时,产品并不总是被计算在内。我必须使用ajax来收集所有数据,因为我使用的是JQuery datatables插件。 产品清单应如下所示:

Correct view:

Incorrect view:

不正确的视图是我的windows firefox的一个屏幕,正确的视图来自我在linux上的chrome broswer。看起来有一些依赖于运行我的webservice的浏览器。我在服务器生产上测试我的web服务,它只在我的chrome浏览器上正常工作。

我的好友说用Ajax代码发送了不适当的数据。

这是我的HTML模板:

{% block content %}
<div class="panel-body">
<form method="post" action="{{ path('order') }}" id="orderList">
<table class="table table-bordered table-striped mb-none" id="datatable-default">
    <thead>
    <tr>
        <th>Nazwa</th>
        <th>Kod</th>
        <th>Cena netto(zł)</th>
        <th class="hidden-xs">Cena brutto(zł)</th>
        <th class="hidden-xs">Ilość</th>
    </tr>
    </thead>
    <tbody>

    {% for product in products %}
    <tr>
        <td>{{ product.productName }}</td>
        <td>{{ product.code }}
        </td>
        <td>{{ product.priceNetto }}</td>
        <td class="center hidden-xs">{{ product.priceBrutto }}</td>
        <td>

            <input type="number" class="spinner-input form-control" min="0" value="0" name="cart[{{ product.code }}]" />

        </td>
    </tr>
    {% endfor %}

    </tbody>
</table>
{%  if app.user != null %}
    <button id="getData" type="submit" class="btn btn-primary hidden-xs">Zamów</button>
{% else %}
    <p>Zaloguj się aby dokonać zamówienia</p>
{% endif %}
</form>
</div>
{% endblock %}

AJAX代码:

$(document).ready(function () {
$('#getData').click( function (event) {
    //event.preventDefault();

    var paginator = $('#datatable-default').DataTable();

    var dat = paginator.$('input').serialize();
    console.log(dat);

    console.log(decodeURIComponent(dat));

    $.ajax({
        type: "POST",
        url: $('#orderList').attr('action'),
        data: {'orders': decodeURIComponent(dat)},
        success: function (response) {
            console.log(response)
        }
    });
});
});

我的服务器端代码:

public function orderAction(Request $request)
{
    $session = $request->getSession();

    $totalPriceNetto = 0;
    $totalPriceBrutto = 0;

    $user = $this->getUser();
    $address = $user->getStreet();

    if($request->isXmlHttpRequest())
    {
            $repository = $this->getDoctrine()->getRepository('AppBundle:Products');

            $jsitems = $request->get('orders');
            $items = [];
            parse_str($jsitems, $items);

            $orderItems = [];
            foreach ($items['cart'] as $index=>$item)
            {
                if( $item != 0)
                {
                    $orderItems[$index] = $item;
                    $orders[$index] = $repository->findBy(['code' => $index]);
                    //$orders[$index][0]->setPriceBrutto(str_replace(',', '.', str_replace('.', '', $orders[$index][0]->getPriceBrutto())));
                    //$orders[$index][0]->setPriceNetto(str_replace(',', '.', str_replace('.', '', $orders[$index][0]->getPriceNetto())));
                    $orders[$index]['value'] = $item;
                }
            }


            $session->set('orders', $orders);
            $session->set('orderItems', $orderItems);

            foreach ($orders as $index=>$item)
            {
                $productObject = $item[0];
                $totalPriceNetto += floatval(str_replace(',', '.', str_replace('.', '', $productObject->getPriceNetto()))) * (float)$item['value'];
                $totalPriceBrutto += floatval(str_replace(',', '.', str_replace('.', '', $productObject->getPriceBrutto()))) * (float)$item['value'];
            }

            $totalPriceBrutto = round($totalPriceBrutto - ($totalPriceBrutto * $user->getPromo()/100), 2);


            $session->set('dd', $totalPriceNetto);
            $session->set('de', $totalPriceBrutto);

            return $this->render("/default/shop/makeOrder.html.twig", ['totalPriceNetto' => $totalPriceNetto, 'totalPriceBrutto' => $totalPriceBrutto, 'address' => $address]);
    }

    if($session->has('dd') && $session->has('de'))
    {
        $totalPriceBrutto = $session->get('de');
        $totalPriceNetto = $session->get('dd');

        $session->remove('dd');
        $session->remove('de');
    }
    return $this->render("/default/shop/makeOrder.html.twig", ['totalPriceNetto' => $totalPriceNetto, 'totalPriceBrutto' => $totalPriceBrutto, 'address' => $address]);
}

0 个答案:

没有答案