为了账号安全,请及时绑定邮箱和手机立即绑定

Yii2 302 重定向 jQuery AJAX 请求,重定向整个页面

Yii2 302 重定向 jQuery AJAX 请求,重定向整个页面

PHP
RISEBY 2022-01-08 17:11:19
我有一个动作:public function actionAjaxLoadBasketSmall() {    $this->enableCsrfValidation = false;    return $this->renderPartial('@app/views/basket/_small');}一些 JavaScriptfunction loadBasketSmall() {    $.ajax({        method: "POST",        url: "/basket/ajax-load-basket-small",        dataType: "html",        beforeSend: function () {            $('#basketSmall').addClass('loading');        },        complete: function (data) {            $("#basketSmall").replaceWith(data.responseText);        }    });}从此函数调用,例如:function handleProductTileButton(e) {    e.preventDefault();    var input = $(this);    $('#basketSmall').addClass('loading');    $.ajax({        method: "GET",        url: "/basket/ajax-add-product",        dataType: "html",        data: {            productId: input.data('product-id'),            quantity: 1,        },        beforeSend: function () {            input.addClass('loading');        },        complete: function (data) {            $('.top-bar .search-results').html(data.responseText);            input.removeClass('loading');            loadBasketSmall();        }    });}每当 Ajax 调用完成时,整个页面都会被重定向到/basket/ajax-load-basket-small这些是响应标头。注意 302 响应代码。
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

所以穆罕默德建议后的最终解决方案


语言资产.php


<?php


namespace frontend\assets;


use yii\web\AssetBundle;


/**

 * Language application asset bundle.

 */

class LanguageAsset extends AssetBundle

{

    public function init() {

        parent::init();

        $view = \Yii::$app->controller->view;

        $language = \Yii::$app->language;

        $js = "const LANG='{$language}';";

        $view->registerJs($js, $view::POS_HEAD);

    }

}

在我的布局文件中,我添加了:


use frontend\assets\LanguageAsset;


LanguageAsset::register($this);


查看完整回答
反对 回复 2022-01-08
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

因此,这取决于使服务器发送重定向响应的语言检测。


为了解决这个问题,我将此代码添加到我的基本控制器类中


public function init() {

    parent::init();

    $this->initJsLang();

}


public static function jsDefineLang() {

    return "const LANG = '" . \Yii::$app->language ."';";

}


protected function initJsLang() {

    $this->getView()->registerJs(static::jsDefineLang(), \yii\web\View::POS_HEAD);

}

并相应地更新了我的 JavaScript:


function handleProductTileButton(e) {

    e.preventDefault();

    var input = $(this);

    $('#basketSmall').addClass('loading');

    $.ajax({

        method: "GET",

        url: "/" + LANG + "/basket/ajax-add-product",

        dataType: "html",

        data: {

            productId: input.data('product-id'),

            quantity: 1,

        },

        beforeSend: function () {

            input.addClass('loading');

        },

        complete: function (data) {

            $('.top-bar .search-results').html(data.responseText);

            input.removeClass('loading');

            loadBasketSmall();

        }


    });

}


function loadBasketSmall() {

    $.ajax({

        method: "GET",

        url: "/" + LANG + "/basket/ajax-load-basket-small",

        dataType: "html",

        beforeSend: function () {

            $('#basketSmall').addClass('loading');

        },

        complete: function (data) {

            $("#basketSmall").replaceWith(data.responseText);

        }


    });

}


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信