如何通过 AJAX 实现表单提交而不跳转页面

秋强同学_7419

秋强同学_7419

2026-06-17

777人浏览

原创

如何通过 AJAX 实现表单提交而不跳转页面

本文介绍如何使用 ajax 替代传统表单提交,实现在 laravel 中无刷新发送邮件并保留当前页面状态,避免重定向,同时确保 csrf 安全和数据完整性。

本文介绍如何使用 ajax 替代传统表单提交,实现在 laravel 中无刷新发送邮件并保留当前页面状态,避免重定向,同时确保 csrf 安全和数据完整性。

在 Laravel 应用中,表单默认通过 POST 提交并触发服务端重定向(如 redirect()->route(...)),这会导致页面跳转、用户体验中断。要实现“点击即发送、不跳转、有反馈”的效果,必须将同步提交改为异步 AJAX 请求,并妥善处理 CSRF 令牌、表单数据序列化及服务端响应。

✅ 正确实现步骤

1. 修改表单:移除 action 和 method 的依赖,添加唯一 ID 并禁用默认提交


{{ csrf_field() }}

⚠️ 注意:移除 action 和 method 属性,由 JS 控制提交逻辑;保留 @csrf 或 {{ csrf_field() }} 以供前端读取 token。

2. 使用原生 Fetch 或 jQuery 发送 AJAX 请求(推荐 Fetch,轻量且现代)

<script>
document.getElementById('contactForm').addEventListener('submit', async function (e) {
    e.preventDefault(); // 阻止默认跳转

    const formData = new FormData(this);
    const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

    try {
        const response = await fetch("{{ route('contactanos.store') }}", {
            method: 'POST',
            headers: {
                'X-CSRF-TOKEN': token,
                'Accept': 'application/json'
            },
            body: formData
        });

        const result = await response.json();

        if (response.ok) {
            alert('✅ Correo enviado exitosamente.');
            // 可选:清空表单或重置选择框
            this.reset();
        } else {
            throw new Error(result.message || 'Error al enviar el formulario');
        }
    } catch (error) {
        alert('❌ ' + error.message);
        console.error('AJAX submission failed:', error);
    }
});
</script>

? 小贴士:确保页面

jQuery金融借款单提交表单
jQuery金融借款单提交表单

jQuery金融借款单提交表单,包含出借金额和日期的选择,且自动计算利息,非常的简单方便。

下载
中已声明 CSRF meta 标签:
<meta name="csrf-token" content="{{ csrf_token() }}">

3. 更新控制器:返回 JSON 响应而非重定向

// App\Http\Controllers\CoordinacionesController.php
public function store(Request $request)
{
    // ✅ 验证必要字段(强烈建议添加)
    $validated = $request->validate([
        'emailperito' => 'required|email',
        'email' => 'required|email',
        'siniestro' => 'required|string',
        // 其他关键字段...
    ]);

    try {
        $correo = new ContactanosMailable($validated);
        Mail::to($validated['emailperito'])
            ->cc($validated['email'])
            ->send($correo);

        return response()->json([
            'success' => true,
            'message' => 'Correo enviado correctamente.'
        ], 200);

    } catch (\Exception $e) {
        \Log::error('Email sending failed: ' . $e->getMessage());
        return response()->json([
            'success' => false,
            'message' => 'No se pudo enviar el correo. Inténtelo nuevamente.'
        ], 500);
    }
}

? 安全提示:

  • 永远验证输入:避免直接使用 $request->all(),防止 mass assignment 漏洞;
  • 捕获邮件异常:Mail::send() 可能因 SMTP 配置失败而抛出异常,需 try/catch;
  • 避免敏感信息泄露:JSON 响应中不要返回调试堆栈或数据库细节。

4. (可选)增强用户体验:添加加载状态与错误高亮

// 在 fetch 前添加 loading 效果
const submitBtn = e.target.querySelector('button[type="submit"]');
submitBtn.disabled = true;
submitBtn.textContent = 'Enviando...';

// fetch 后恢复按钮
submitBtn.disabled = false;
submitBtn.textContent = 'Enviar formulario';

? 总结

  • 表单无跳转的核心是 拦截 submit 事件 + AJAX 提交 + JSON 响应;
  • CSRF 必须通过 X-CSRF-TOKEN 请求头传递(而非 _token 字段),更符合现代实践;
  • 服务端应统一返回结构化 JSON,便于前端统一处理成功/失败;
  • 始终兼顾验证、异常处理与用户反馈,才能构建健壮的无刷新交互流程。

通过以上改造,你的“Enviar formulario”按钮将静默完成邮件发送,页面停留原地,体验更接近桌面应用——这才是现代 Web 表单应有的交互范式。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

1975

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2722

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

936

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3039

7

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2380

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

340

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2213

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1141

6

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

2026.03.30

201

20

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共18课时 | 1.8万人学习