AJAX 發 GET 請求,後端返回完整 HTML(或 302 重定向),但頁面不跳轉,因為 AJAX 不會自動導航瀏覽器。
XMLHttpRequest/fetch 只接收響應體,不處理 301/302 重定向導航(瀏覽器自動跟隨重定向並返回最終內容)。data 只是字串,需手動處理。// 後端
return ResponseEntity.ok().body("{\"redirect\": \"/dashboard\"}");
// 前端
fetch('/login', {method:'POST', body:formData})
.then(r => r.json())
.then(data => { if (data.redirect) location.href = data.redirect; });
<form action="/login" method="post">,瀏覽器原生跳轉。response.setHeader("X-Redirect", "/url"),前端 xhr.getResponseHeader('X-Redirect') 判斷跳轉。核心原則:狀態改變(登錄、提交)用表單或返回跳轉 URL,查詢類操作用 AJAX。