Prestashop 1.7多个ajax动作函数在控制器

时间:2017-10-24 14:03:57

标签: php jquery ajax prestashop prestashop-1.7

我有一个javascript文件,我在不同的按钮上有两个ajax调用。我有一个控制器Auction.php,其中我有两个动作的函数(showPopup和askBidControl),但对于第二个函数,ajax返回404 not found。它甚至不进入initContent函数。以下是代码示例:

 class askbidAuctionModuleFrontController extends ProductControllerCore {

    public function initContent(){
        $this->ajax = true;
        parent::initContent();
    }

    public function displayAjaxShowPopup(){
        $type = Tools::getValue('type');
        switch($type){
            case 'bid':

                break;
            case 'ask':

                break;
            default:
                return false;
        }
        $product = $this->getTemplateVarProduct();
        ob_end_clean();
        header('Content-Type: application/json');

        $tpl = _PS_MODULE_DIR_.'askbid/views/templates/front/productPopUp.tpl';
        $this->context->smarty->assign('product', $product);
        $this->context->smarty->assign('type', $type);
        $html = $this->context->smarty->fetch($tpl);
        $this->ajaxDie(Tools::jsonEncode([
            'askbid_popup' => $html,
            'product' => $product,
        ]));
    }

    public function displayAjaxAskBidControl(){
        $type = Tools::getValue('type');
        $price = Tools::getValue('price');
        ob_end_clean();
        header('Content-Type: application/json');
        die('saracie');
//        $this->ajaxDie(Tools::jsonEncode(['trafalet']));
    }

}


JS:

$(document).ready(function(){
    $('.askBidButton').on('click', function () {
        let buttons_container = $("#askbid_buttons");
        let data = {
            'action': 'showPopup',
            'id_product': buttons_container.data('id-product'),
            'id_product_attribute': buttons_container.data('id-product-attribute'),
            'type': $(this).val()
        };
        let url = buttons_container.data('popup-url');
        $.post(url, data, null, 'json').then(function (resp) {
            $('body').append(resp.askbid_popup);
            let productModal = $(`#bidask-modal-${resp.product.id}-${resp.product.id_product_attribute}`);
            productModal.modal('show');
            productConfig(productModal);
            productModal.on('hidden.bs.modal', function () {
                productModal.remove();
            });
        }).fail((resp) => {
            prestashop.emit('handleError', {eventType: 'clickQuickView', resp: resp});
        });
        return false;
    });
    $('body').delegate('#continue_place_askbid', 'click', function(e){
       let type = $(this).val();
       let price = $(this).parent().find('#askbid_price_input').val();
       let data = {
           'action':'askBidControl',
           'type': type,
           'price': price
       };
       let url = $(this).closest('.quickview').data('popup-url');
       console.log(url);
       console.log('trafalet');
       $.ajax({
           url: url,
           data: data,
           success: function(resp){
               console.log('trafaleteeeee');
           },
           error: function(err){
               console.log(err);
           }
       });
       return false;
    });

productPopUp.tpl位于views / templates / front /

我不确切知道如何使第二个ajax调用工作。它只是给出404错误。

更新:似乎它甚至没有通过第二个ajax请求(askBidController)上的Auction.php的initContent函数,它有2个调用,一个用于我在ajax中的url,返回302找到,另一次调用index.php?controller = 404。

1 个答案:

答案 0 :(得分:1)

PrestaShop控制器的ajax方法需要精确的语法(使用action param调用):

<ivysettings> <include file="ivysettings.xml"/> <resolvers> <chain name="mychain" > <resolver ref="myresolver"/> <!-- Add more resolvers to your original chain --> </chain> </resolvers> </ivysettings> + myCustomAction

在你的情况下:
displayAjax
应该工作;)

<强>注意: 模块控制器应该扩展public function displayAjaxAskBidControl(){}类,而不是其他控制器。

在第一个ajax调用的情况下,你将id_product作为参数,所以父控制器执行ModuleFrontController方法,在第二次调用中,productController没有找到id_product,因此重定向< / p>