如何使用 AJAX 实现无刷新添加商品到购物车

心靈之曲

心靈之曲

2026-08-01

909人浏览

原创

如何使用 AJAX 实现无刷新添加商品到购物车

本文详细讲解如何通过原生 jquery ajax 替代传统表单提交,实现点击“加入购物车”后不跳转、不滚动、即时更新购物车数量与状态的用户体验优化方案。

本文详细讲解如何通过原生 jquery ajax 替代传统表单提交,实现点击“加入购物车”后不跳转、不滚动、即时更新购物车数量与状态的用户体验优化方案。

在电商网站开发中,用户在移动端浏览长列表商品时,若每次点击“加入购物车”都触发页面跳转或顶部刷新,会导致体验严重下降——页面自动滚动至顶部、输入焦点丢失、操作中断。传统 form action 提交方式无法满足现代 Web 的交互要求,而 AJAX 是解决该问题的标准实践。

✅ 正确的 AJAX 表单提交逻辑

原始代码中存在多个关键问题:

  • 使用 $('body').on('submit', '.formadd', ...) 时,$(id).serialize() 中的 id 是字符串而非 DOM 元素,导致序列化失败;
  • $('.nav').load(' .nav') 尝试局部重载自身,但语法错误(缺少 URL 路径),且未处理响应数据;
  • addCart.php 直接输出 <script>alert(...)</script>,虽能触发浏览器提示,但破坏了 AJAX 的纯数据通信原则,干扰 JSON 解析并掩盖真实错误。

以下是经过验证、稳定可用的修复版 AJAX 提交方案:

// 推荐写法:绑定到具体表单元素,避免事件委托歧义
$('.formadd').on('submit', function(ev) {
    ev.preventDefault(); // 阻止默认提交行为(关键!)

    const $form = $(this);
    const formData = $form.serialize(); // 自动收集所有 input[name] 值
    const actionUrl = $form.attr('action');
    const method = $form.attr('method') || 'POST';

    $.ajax({
        type: method,
        url: actionUrl,
        data: formData,
        dataType: 'json', // 明确期望 JSON 响应,便于错误排查
        success: function(response) {
            // 清空当前表单数量输入框
            $form.find('.cantidad').val('1');

            // 刷新购物车徽标/数量(假设 .cartbasket 是购物车计数容器)
            $('.cartbasket').load(' .cartbasket');

            // 显示成功提示(需前端有对应 DOM)
            $('.alert-co').removeClass('hide').delay(2000).addClass('hide');

            // 可选:播放微反馈音效或添加动画
            // $form.find('.c').addClass('added').text('✓ Añadido');
        },
        error: function(xhr, status, error) {
            console.error('AJAX Error:', status, error, xhr.responseText);
            $('.alert-inc').removeClass('hide').delay(2000).addClass('hide');
        }
    });
});

? 后端 addCart.php 改进要点(必须同步调整)

为确保 AJAX 稳定通信,请将 addCart.php 改为返回标准 JSON 格式,移除所有 <script> 输出和 echo HTML 片段</script>

基于jQuery的AJAX和JSON的实例 中文WORD版
基于jQuery的AJAX和JSON的实例 中文WORD版

本文档主要讲述的是基于jQuery的AJAX和JSON的实例;过jQuery内置的AJAX功能,直接访问后台获得JSON格式的数据,然后通过jQuer把数据绑定到事先设计好的html模板上,直接在页面上显示。有需要的朋友可以下载看看

下载
<?php session_start();
include 'connect.php';
include 'config.php';

header('Content-Type: application/json; charset=utf-8');

if (!isset($_POST['id'])) {
    echo json_encode(['success' => false, 'message' => 'Falta ID del producto']);
    exit;
}

$idEncrypted = $_POST['id'];
if (!is_numeric(openssl_decrypt($idEncrypted, COD, KEY))) {
    echo json_encode(['success' => false, 'message' => 'ID inválido']);
    exit;
}

$ID = (int)openssl_decrypt($idEncrypted, COD, KEY);
$CANTIDAD = isset($_POST['cantidad']) && (int)$_POST['cantidad'] >= 1 
    ? (int)$_POST['cantidad'] 
    : 1;

if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = [];
}

$idProductos = array_column($_SESSION['cart'], 'ID');
if (in_array($ID, $idProductos)) {
    echo json_encode(['success' => false, 'message' => 'Producto ya en el carrito']);
} else {
    $_SESSION['cart'][] = ['ID' => $ID, 'CANTIDAD' => $CANTIDAD];
    echo json_encode(['success' => true, 'message' => 'Producto añadido']);
}
?>

⚠️ 注意事项:

  • 前端 dataType: 'json' 必须与后端 header('Content-Type: ...') + json_encode() 匹配;
  • 所有 echo 必须是纯 JSON,禁止混入 HTML、JS 或空白字符(否则解析失败);
  • 使用 array_column() 和 in_array() 检查重复更安全,避免索引错位;
  • 建议对 $_POST['cantidad'] 做整型强制转换与范围校验(如 ≤ 999),防止恶意输入。

?️ 前端结构建议补充

为支持 .cartbasket.load(' .cartbasket') 正常工作,请确保页面中存在可被局部加载的购物车容器,例如:

<!-- 在导航栏或页眉中 -->
<div class="cartbasket">
    <span class="cart-count"><?php echo isset($_SESSION['cart']) ? count($_SESSION['cart']) : 0; ?></span>
</div>

同时,backend/addCart.php 不再负责页面跳转或弹窗,全部交由前端统一处理,职责清晰、易于调试、利于后续扩展(如加入 Toast 通知、动画反馈、库存实时校验等)。

通过以上改造,用户无论在 PC 还是移动设备上,点击任意位置的商品“加入购物车”,都将获得瞬时响应、无跳转、无滚动、状态实时更新的专业级体验。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

ajax

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

5408

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

3586

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1785

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

2249

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

2758

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

1998

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

3006

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

2288

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

10925

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

Symfony教程(入门篇+基础篇)
Symfony教程(入门篇+基础篇)

共18课时 | 1.6万人学习