Добавить элемент и оставаться на текущей странице - php, ajax, jquery

Я использую переводчик Google, поэтому могут возникать ошибки.

Моя проблема: добавить товар и оставаться на текущей странице

Я попытался воспользоваться советом по ссылке ниже, но у меня ничего не вышло :-(

Добавить элемент и оставаться на текущей странице

Код сценария:

    <?php 
if ( !defined( 'CUSTOMER_PAGE' ) )
  exit;
require_once DIR_SKIN.'_header.php'; // include design of header
?>
<div id = "product">
<?php
if ( isset( $aData['sName'] ) ){ // displaying product content ?>
  <script type = "text/javascript">
    var sTitle = "<?php echo $aData['sName']; ?>";
    var fPrice = Math.abs( "<?php echo $aData['mPrice']; ?>" );
  </script><?php

  if ( isset( $aData['mPrice'] ) || isset( $aData['sAvailable'] ) ){ // displaying box with price, basket and availability - START
    echo '<div id = "box">';
      if ( isset( $aData['mPrice'] ) && is_numeric( $aData['mPrice'] ) ){?>
        <div id = "price"><em><?php echo $lang['Price']; ?>:</em><strong id = "priceValue"><?php echo $aData['sPrice']; ?></strong><span><?php echo $config['currency_symbol']; ?></span></div><?php
      }
      elseif ( !empty( $aData['mPrice'] ) ){?>
        <div id = "noPrice"><?php echo $aData['sPrice']; ?></div><?php
      }
      if ( isset( $aData['sAvailable'] ) ){?>
        <div id = "available"><?php echo $aData['sAvailable']; ?></div><?php
      }
      if ( isset( $aData['mPrice'] ) && is_numeric( $aData['mPrice'] ) && !empty( $config['basket_page'] ) && isset( $oPage->aPages[$config['basket_page']] ) ){?>
        <form action = "<?php echo $oPage->aPages[$config['basket_page']]['sLinkName']; ?>" method = "post" id = "addBasket" class = "form">
          <fieldset>
            <legend><?php echo $lang['Basket_add']; ?></legend>
            <input type = "hidden" name = "iProductAdd" value = "<?php echo $aData['iProduct']; ?>" />
            <input type = "hidden" name = "iQuantity" value = "1" />
            <input type = "submit" value = "<?php echo $lang['Basket_add']; ?>" class = "submit" />
          </fieldset>
        </form><?php
      }
    echo '</div>';
  } // displaying box with price, basket and availability - END
}
?>
</div>

Я переписал код и добавил его ниже:

if ( isset( $aData['sName'] ) ){ // displaying product content ?>

 <script type = "text/javascript">
    $('#addBasket .submit').click(function() {
    var keyValues = {
        iProductAdd : $(this).parent().find('input[name = "iProductAdd"]').val(),
        iQuantity : $(this).parent().find('input[name = "iQuantity"]').val()
    };
    $.post('<?php echo $oPage->aPages[$config['basket_page']]['sLinkName']; ?>', keyValues, function(rsp) {
        // make your php script return some xml or json that gives the result
        // rsp will be the response
    });
    return false; // so the page doesn't POST
});
  </script>

Но все равно не работает, после нажатия на кнопку товар добавляется, но мы не остаемся на той же странице и переходим в корзину.

Буду благодарен за любую помощь

Адам

Вместо $('#addBasket .submit') попробуйте с $('#addBasket').on('submit, function(){...

asprin 20.07.2018 14:59

похоже, что вы помещаете скрипт перед формой, а кнопка в этот момент не существует, поэтому слушатель событий никогда не добавляется к ней. Обернуть в $(function() { /* your code*/})

charlietfl 20.07.2018 15:00

обновленный ответ, можете ли вы попробовать это ...

MyTwoCents 20.07.2018 15:01
$(function() { $("#addBasket").on("submit",function(e) { e.preventDefault(); ... }); });
mplungjan 20.07.2018 15:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
70
3

Ответы 3

Вы можете использовать e.preventDefault() вместо return false;

<script type = "text/javascript">
    $('#addBasket .submit').click(function(e) {
    e.preventDefault();
    var keyValues = {
        iProductAdd : $(this).parent().find('input[name = "iProductAdd"]').val(),
        iQuantity : $(this).parent().find('input[name = "iQuantity"]').val()
    };
    $.post('<?php echo $oPage->aPages[$config['basket_page']]['sLinkName']; ?>', keyValues, function(rsp) {
        // make your php script return some xml or json that gives the result
        // rsp will be the response
    });

});

Изменить 1:

Вы можете сделать еще кое-что. Вместо типа ввода как submit. сохраните его как button, поскольку я заметил, что вы делаете JSON вручную.

Итак, ваш входной запрос может быть примерно таким

<input type = "button" value = "<?php echo $lang['Basket_add']; ?>" class = "submit" />

По сути, они делают то же самое. Если return false не работает, вероятно, что-то еще не так

charlietfl 20.07.2018 14:55

нажатие на кнопку ничего не вызывает, в корзину не добавляет, дальше не идет. :-(

BoomAdam 20.07.2018 15:06

Можете ли вы указать keyValues ​​в консоли и посмотреть, создан ли JSON

MyTwoCents 20.07.2018 15:07
$(function() { $("#addBasket").on("submit",function(e) { e.preventDefault(); ... }); });
mplungjan 20.07.2018 15:18

Вы можете это попробовать?

$('#addBasket .submit').click(function(event) {
 event.preventDefault();
var keyValues = {
    iProductAdd : $(this).parent().find('input[name = "iProductAdd"]').val(),
    iQuantity : $(this).parent().find('input[name = "iQuantity"]').val()
};
$.post('<?php echo $oPage->aPages[$config['basket_page']]['sLinkName']; ?>', keyValues, function(rsp) {
    // make your php script return some xml or json that gives the result
    // rsp will be the response
});
return false; // so the page doesn't POST
});

К сожалению, он добавляет в корзину и переходит на свой сайт-корзину, не остается на товаре.

BoomAdam 20.07.2018 15:02
$(function() { $("#addBasket").on("submit",function(e) { e.preventDefault(); ... }); });
mplungjan 20.07.2018 15:18

Слушатель событий не добавляется к кнопке, потому что кнопка не существует, когда тег скрипта находится над формой.

Либо поместите тег скрипта после формы, либо оберните код в "готовы" вызов

$(function(){
  $('#addBasket .submit').click(function() {
  ...
})

Я воспользовался советом: «похоже, вы собираетесь использовать слушателя в будущем. Оберните $ (function () {/ * ваш код * /}) - charlietfl 12 минут назад». Это сработало :-), но у меня все еще есть небольшая проблема, пока я не обновлю свои браузеры, у меня в корзине 0 товаров.

BoomAdam 20.07.2018 15:16

Пожалуйста!! : $(function() { $("#addBasket").on("submit",function(e) { e.preventDefault(); ... }); });

mplungjan 20.07.2018 15:17

Он работает, но у меня все еще есть небольшая проблема, пока я не обновлю свой браузер вручную или не перейду на другую страницу, у меня в корзине 0 продуктов.

BoomAdam 20.07.2018 15:21

Изучите фактический запрос в сети инструментов разработчика браузера, чтобы убедиться, что отправлено именно то, что вы ожидаете, и проверьте статус запроса и то, что на самом деле возвращается.

charlietfl 20.07.2018 15:46

Другие вопросы по теме