Biểu ngữ đỏ "chết chóc": Khi Gutenberg gặp lỗi
Bạn đã dành ba giờ để trau chuốt một bài đăng quan trọng. Bạn nhấn 'Cập nhật', mong đợi một thông báo thành công màu xanh. Thay vào đó, một biểu ngữ màu đỏ xuất hiện: Updating failed. The response is not a valid JSON response. Công việc của bạn không được lưu và lỗi này không cho bạn biết lý do tại sao.
WordPress hiện lưu nội dung thông qua REST API. Nó mong đợi một cấu trúc dữ liệu sạch và cụ thể được trả về. Nếu máy chủ của bạn gửi lại một cảnh báo PHP, trang lỗi 404 hoặc màn hình 'Coming Soon' thay vì dữ liệu, trình soạn thảo sẽ bị lỗi. Đây là một vấn đề thường bắt nguồn từ sự gián đoạn giao tiếp giữa trình duyệt và máy chủ của bạn.
Xác định nguyên nhân gốc rễ
Để khắc phục lỗi này, bạn cần ngừng đoán mò và bắt đầu xem xét luồng dữ liệu. Tôi nhận thấy rằng 90% các trường hợp này được giải quyết bằng cách kiểm tra tab Network.
1. Chiến lược sử dụng DevTools của trình duyệt
Mở Công cụ dành cho nhà phát triển (Developer Tools) của trình duyệt (F12 hoặc Cmd+Option+I) và chọn tab Network. Nhấn 'Cập nhật' trong WordPress một lần nữa. Bạn sẽ thấy một mục mới, thường là một dòng màu đỏ, nhắm mục tiêu vào một endpoint như /wp-json/wp/v2/posts/101.
- 404 Not Found: Cấu trúc đường dẫn tĩnh (permalink) của bạn có thể bị hỏng.
- 403 Forbidden: Tường lửa bảo mật (như Cloudflare hoặc ModSecurity) đang chặn yêu cầu lưu.
- 500 Internal Server Error: Máy chủ của bạn gặp sự cố khi cố gắng xử lý bài đăng, thường là do vấn đề về
memory_limitcủa PHP. - 200 OK (nhưng vẫn thất bại): Trường hợp này khá phổ biến. Điều đó có nghĩa là máy chủ đã gửi mã thành công, nhưng lại thêm một dòng 'Notice: Undefined index' ở đầu tệp, làm hỏng định dạng JSON.
2. Đọc thông điệp ẩn
Nhấp vào yêu cầu bị lỗi trong danh sách. Chuyển đến tab con Response. Nếu bạn thấy mã HTML bắt đầu bằng <!DOCTYPE html>, máy chủ đang trả về một trang web trong khi lẽ ra nó phải trả về dữ liệu thô. Đây chính là bằng chứng xác thực nhất.
Các giải pháp đã được kiểm chứng thực tế
Giải pháp A: 'Đặt lại' đường dẫn tĩnh (Permalink)
Đôi khi bản đồ nội bộ cho các URL của bạn bị xáo trộn. Hãy điều hướng đến Settings > Permalinks và chỉ cần nhấn Save Changes. Bạn không cần thay đổi bất kỳ cài đặt nào. Hành động này buộc WordPress ghi lại các quy tắc trong tệp .htaccess hoặc Nginx, thường giúp khôi phục đường dẫn REST API ngay lập tức.
Giải pháp B: Giải quyết xung đột HTTPS
Nếu bạn vừa cài đặt chứng chỉ SSL, trang web của bạn có thể rơi vào vòng lặp 'Mixed Content' (Nội dung hỗn hợp). Điều này xảy ra khi trang quản trị sử dụng HTTPS nhưng API lại cố gắng kết nối qua HTTP. Để khắc phục điều này cho các trang web sử dụng proxy như Cloudflare, hãy thêm đoạn mã sau vào đầu tệp wp-config.php:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
Giải pháp C: Tìm plugin gây lỗi
Một plugin duy nhất được mã hóa kém có thể tạo ra cảnh báo PHP chạy ngầm. Văn bản thừa này làm "ô nhiễm" phản hồi JSON.
- Thử cài đặt plugin Classic Editor. Nếu lỗi biến mất, vấn đề chắc chắn nằm ở cách theme hoặc các plugin của bạn tương tác với REST API.
- Tạm thời vô hiệu hóa các bộ bảo mật như Wordfence hoặc 'All In One WP Security'. Kiểm tra nhật ký (logs) của chúng để tìm các 'yêu cầu bị chặn' đến đường dẫn
/wp-json/.
Giải pháp D: Tắt thông báo lỗi PHP
Trên các trang web đang hoạt động (production), bạn không bao giờ nên hiển thị lỗi cho người dùng. Nếu WP_DEBUG_DISPLAY đang bật, nó sẽ chèn văn bản lỗi trực tiếp vào các phản hồi API của bạn. Hãy tắt nó trong tệp wp-config.php:
// Các thiết lập production được khuyến nghị
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
Việc này sẽ ẩn các lỗi khỏi trình soạn thảo nhưng vẫn lưu chúng vào wp-content/debug.log để bạn có thể xem lại sau.
Xác minh: Làm thế nào để biết lỗi đã được khắc phục
Đừng chỉ tải lại trang. Hãy truy cập yourdomain.com/wp-json/ trên trình duyệt của bạn. Bạn sẽ thấy một "bức tường" văn bản trông giống như mã được sắp xếp. Nếu bạn thấy lỗi '404' hoặc trang 'Site under maintenance' (Trang web đang bảo trì), API vẫn đang bị chặn và lỗi 'Invalid JSON' sẽ tiếp tục diễn ra.
Mẹo nhỏ: Nếu phản hồi trông giống như một mớ hỗn độn, hãy sao chép toàn bộ khối đó và dán vào JSON Formatter & Validator tại ToolCraft. Nó sẽ làm nổi bật chính xác dòng chứa thông báo lỗi PHP đang ẩn bên trong dữ liệu của bạn, giúp bạn tiết kiệm hàng giờ gỡ lỗi mò mẫm.
Lời kết
Lỗi 'Invalid JSON response' hiếm khi liên quan đến bản thân định dạng JSON. Đó là triệu chứng của một máy chủ "ồn ào" (nhiều thông báo lỗi). Hãy bắt đầu với tab Network, tắt các thông báo PHP và làm mới đường dẫn tĩnh của bạn. Đa số trường hợp, giải pháp chỉ nằm ở một cú nhấp chuột 'Save Changes'.

