【问题标题】:yii2 shopping cart ajaxyii2 购物车ajax
【发布时间】:2018-12-23 22:43:16
【问题描述】:

我想修改 yii2 中已有的购物车,所以它不会重新加载页面,意味着通过 ajax 使其工作。 当前购物车如下所示:

 <form method="post" id="form-prodtobuy-<?= $p->id ?>" action="<?= \Yii::$app->urlManager->createUrl(["site/cart"]) ?>">
 <input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
 <input type="hidden" name="task" value="update" />
 <input id="<?= $p->id ?>" class="form-control buy-input" name="product[<?= $p->id ?>]" value="<?= Purchase::getCartValue($p->id) ?>" data-id="<?= $p->id ?>" placeholder="0">
 <button class="btn btn-primary" type="submit">Buy <i class="glyphicon glyphicon-shopping-cart"></i></button>
 </form>

它可以正常工作,但会重新加载页面。

var_dump($_SESSION);之后看起来像:

 array(2) { ["__flash"]=> array(0) { } ["products"]=> array(3) { [2958]=> string(1) "2" [2959]=> string(1) "1" [2581]=> string(1) "1" } }

我明显的解决方案是在提交事件上添加 e.preventDefault() 如下:

 $(document).on('submit', '[id^=form-prodtobuy-]', function(e) {
 e.preventDefault();
 var someVar = $('#someInput').val();
     $.ajax({
        type: "post",
        url: "<?php echo \Yii::$app->urlManager->createUrl(["site/cart"]) ?>",
        data: {???:someVar},
        .....................
     });
 });

ajax 的“数据”应该是什么?
在哪里或如何获得变量名称以正确设置会话?

【问题讨论】:

    标签: php ajax yii2 shopping-cart


    【解决方案1】:

    在 ajax“数据”中放入表单序列化输出。

    注意我使用了heredoc格式,所以最后一个EOT_JS前面不能有空格。

    $urlForm = \Yii::$app->urlManager->createUrl(["site/cart"]);
    
    $this->registerJs( <<< EOT_JS 
    
        $(document).on('submit', '[id^=form-prodtobuy-]', function(e) {
            e.preventDefault();
    
            var formData = $(this).serialize();
    
            $.ajax({
                type: "post",
                url: "{$url}",
                data: formData,
                function(data) {
                    console.log('form submit output');
                    console.log(data);
                }
            });
        });
    
    EOT_JS
    );
    

    【讨论】:

    • 好点。谢了。但它仍然会重新加载页面,即使我从表单中删除了 action attr。任何想法为什么会这样?
    • 表单调用的输出是什么?您确定表单调用 site/cart 的输出不是 http 重定向吗?
    • 不,不确定。看起来它重定向了。找不到合适的文件来检查。 yii2 一切都那么乱。任何想法如何处理这个?
    • 检查浏览器控制台以查看表单调用后服务器响应是什么
    • 这正是问题所在,因为它什么也没显示)
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多