You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 2升级到2.3.7后结账页ajax请求URL多undefined前缀如何解决

Magento 2.3.7 结账页AJAX URL异常(含undefined前缀)修复方案

根因说明

URL前缀出现undefined的核心原因是Magento 2.3.7版本前端JS的store code配置注入异常,mage/url 模块拼接请求前缀时无法读取到store code配置值,误将undefined作为路径片段拼接,同时未读取到正确的全局base URL时会复用当前页面路径(/checkout/)作为前缀,最终生成错误URL。


可行修复方案

方案1:主题层覆盖url-builder修复前缀拼接逻辑(推荐,不修改核心代码)

  • 在自定义主题目录下创建文件:app/design/frontend/<你的厂商名>/<你的主题名>/Magento_Theme/web/js/url-builder.js
  • 写入以下代码,重写原有拼接逻辑,过滤undefined值:
define([
    'jquery',
    'mage/url'
], function ($, urlBuilder) {
    'use strict';

    var originalBuild = urlBuilder.build;
    // 重写build方法,修复undefined路径问题
    urlBuilder.build = function (path) {
        var baseUrl = urlBuilder.getBaseUrl();
        // 移除路径开头的undefined片段
        path = path.replace(/^undefined/, '');
        // 绝对路径直接返回
        if (path.indexOf('http') === 0) {
            return path;
        }
        // 规范前后斜杠,避免重复拼接
        return baseUrl.replace(/\/+$/, '') + '/' + path.replace(/^\/+/, '');
    };

    return urlBuilder;
});
  • 在同主题的requirejs-config.js中添加配置,优先加载自定义文件:
var config = {
    map: {
        '*': {
            'mage/url': 'Magento_Theme/js/url-builder'
        }
    }
};
  • 执行静态资源部署和缓存清理命令生效:
php bin/magento setup:static-content:deploy -f
php bin/magento cache:clean

方案2:修复store code前端配置注入

如果方案1不生效,可检查并补充前端全局store配置:

  • 首先查看页面源码,确认是否存在window.store全局配置,如code字段为undefined或配置不存在,继续后续操作
  • 在主题布局文件app/design/frontend/<你的厂商名>/<你的主题名>/Magento_Theme/layout/default.xml的<body>节点中添加配置注入代码:
<referenceContainer name="after.body.start">
    <block class="Magento\Framework\View\Element\Template" name="store.config.inject" template="Magento_Theme::js/store_config.phtml" />
</referenceContainer>
  • 创建对应的phtml模板文件app/design/frontend/<你的厂商名>/<你的主题名>/Magento_Theme/templates/js/store_config.phtml:
<?php
/** @var \Magento\Framework\View\Element\Template $block */
$currentStore = $block->getStoreManager()->getStore();
?>
<script>
    window.store = window.store || {};
    window.store.code = '<?= $block->escapeJs($currentStore->getCode()) ?>';
    window.store.id = '<?= $block->escapeJs($currentStore->getId()) ?>';
</script>
  • 执行缓存清理命令生效。

方案3:临时验证补丁(不推荐,升级会被覆盖)

如需快速验证问题,可临时修改vendor/magento/module-checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js,在调用storage.post前添加代码过滤undefined:

serviceUrl = serviceUrl.replace(/undefined/g, '');

内容的提问来源于stack exchange,提问作者nshah143

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:36:01