Khi xây dựng website WordPress, việc sử dụng plugin form là giải pháp phổ biến để thu thập thông tin người dùng. Tuy nhiên, tình trạng plugin form lỗi ajax submit thường xuyên xảy ra, khiến dữ liệu không được gửi đi, người dùng không nhận được phản hồi và trải nghiệm website bị ảnh hưởng nghiêm trọng. Lỗi này xuất hiện ở nhiều plugin form phổ biến như Contact Form 7, WPForms, Gravity Forms, Elementor Pro Forms hay Ninja Forms. Bài viết này sẽ phân tích chi tiết nguyên nhân gốc rễ, hướng dẫn debug từng bước và đưa ra giải pháp khắc phục triệt để.
Bản Chất Của Lỗi Ajax Submit Trong Plugin Form

Ajax submit là cơ chế cho phép form gửi dữ liệu lên server mà không cần reload lại trang. Khi người dùng nhấn nút submit, JavaScript sẽ gửi request đến admin-ajax.php (trong WordPress) hoặc REST API endpoint. Server xử lý dữ liệu và trả về kết quả dưới dạng JSON. Plugin form lỗi ajax submit xảy ra khi quá trình này bị gián đoạn ở bất kỳ giai đoạn nào: từ khâu khởi tạo request, xử lý phía server, cho đến hiển thị phản hồi cho người dùng.
Lỗi thường biểu hiện qua các dấu hiệu: form không gửi được, spinner quay mãi không dừng, thông báo lỗi hiển thị không đúng, hoặc trang tự động reload sau khi submit. Người dùng có thể thấy thông báo “Lỗi kết nối” hoặc “Có lỗi xảy ra, vui lòng thử lại”.
Nguyên Nhân Phổ Biến Gây Ra Plugin Form Lỗi Ajax Submit
Xung Đột JavaScript Giữa Plugin Và Theme
Đây là nguyên nhân hàng đầu. Nhiều theme và plugin đều enqueue thư viện jQuery, jQuery Migrate hoặc các script khác. Khi có hai phiên bản jQuery khác nhau được tải lên cùng lúc, hoặc một plugin ghi đè lên biến toàn cục, cơ chế ajax của form sẽ bị phá vỡ. Plugin form lỗi ajax submit thường xuất hiện sau khi cài theme mới hoặc cập nhật plugin.
Kiểm tra bằng cách tạm thời chuyển sang theme mặc định (Twenty Twenty-Four) và tắt lần lượt các plugin để xác định xung đột. Công cụ Browser Console (F12) sẽ hiển thị lỗi JavaScript cụ thể như “jQuery is not defined” hoặc “Uncaught TypeError”.
Thiếu Nonce Hoặc Nonce Không Hợp Lệ
WordPress sử dụng nonce (number used once) để bảo vệ form khỏi tấn công CSRF. Khi nonce hết hạn hoặc không được tạo đúng cách, request ajax sẽ bị từ chối. Plugin form lỗi ajax submit do nonce thường xảy ra khi người dùng mở form quá lâu trước khi submit, hoặc khi cache plugin xóa nonce khỏi session.
Giải pháp: kiểm tra mã nguồn form, tìm thẻ input ẩn có name “_wpnonce” hoặc “wp_nonce”. Nếu thiếu, cần kiểm tra hook wp_ajax_ và wp_ajax_nopriv_ trong file functions.php của theme.
Lỗi Cấu Hình Ajax URL
Plugin form cần biết địa chỉ xử lý ajax. Trong WordPress, địa chỉ này là /wp-admin/admin-ajax.php. Nếu biến JavaScript localize (thường là ajaxurl) không được truyền đúng, hoặc bị ghi đè bởi plugin khác, request sẽ gửi đến sai endpoint. Plugin form lỗi ajax submit kiểu này thường đi kèm với lỗi 404 trong Network tab của Developer Tools.
Kiểm tra bằng cách mở Network tab, filter XHR requests, submit form và xem URL request. Nếu thấy đường dẫn lạ hoặc thiếu admin-ajax.php, cần sửa lại cấu hình.
Vấn Đề Với Bộ Nhớ PHP Và Thời Gian Xử Lý
Khi form xử lý file upload lớn, gửi email với attachment, hoặc thực hiện nhiều tác vụ cùng lúc, server có thể hết bộ nhớ hoặc vượt quá thời gian cho phép (max_execution_time). Plugin form lỗi ajax submit trong trường hợp này thường trả về lỗi 500 Internal Server Error hoặc response rỗng.
Kiểm tra error log của server. Nếu thấy lỗi “Allowed memory size exhausted” hoặc “Maximum execution time exceeded”, cần tăng giá trị trong wp-config.php: define(‘WP_MEMORY_LIMIT’, ‘256M’); hoặc yêu cầu hosting hỗ trợ.
Cache Plugin Gây Cản Trở Ajax Request
Các plugin cache như WP Rocket, W3 Total Cache, LiteSpeed Cache thường cache toàn bộ trang, bao gồm cả JavaScript và nonce. Khi người dùng submit form, nonce đã bị cache từ phiên trước không còn hợp lệ. Plugin form lỗi ajax submit do cache thường xảy ra ngẫu nhiên, chỉ với một số người dùng nhất định.
Giải pháp: loại trừ trang có form khỏi cache, hoặc cấu hình cache không cache nonce. Với WP Rocket, vào Settings > Cache > Excluded Pages và thêm slug của trang form.
Hướng Dẫn Debug Plugin Form Lỗi Ajax Submit Chi Tiết

Bước 1: Kiểm Tra Browser Console
Mở Developer Tools (F12), chọn tab Console. Submit form và quan sát lỗi hiển thị. Các lỗi phổ biến:
- “Uncaught ReferenceError: grecaptcha is not defined” – lỗi reCAPTCHA chưa tải
- “Failed to load resource: the server responded with a status of 400” – request sai cú pháp
- “Uncaught TypeError: Cannot read properties of undefined” – biến JavaScript bị thiếu
Ghi lại chính xác dòng lỗi và tên file. Điều này giúp xác định plugin hoặc theme nào gây ra vấn đề.
Bước 2: Kiểm Tra Network Tab
Chuyển sang tab Network, filter XHR hoặc Fetch. Submit form và click vào request vừa xuất hiện. Xem tab Preview để kiểm tra response trả về. Nếu response là 0 hoặc rỗng, server không xử lý được request. Nếu response chứa HTML thay vì JSON, có thể plugin form lỗi ajax submit do redirect hoặc lỗi PHP.
Kiểm tra tab Headers, xem Request URL có đúng là admin-ajax.php không. Nếu không, cần sửa lại cấu hình ajaxurl.
Bước 3: Kiểm Tra Error Log Server
Truy cập cPanel hoặc sử dụng plugin WP Debugging để bật WP_DEBUG. Thêm vào wp-config.php:
define(‘WP_DEBUG’, true); define(‘WP_DEBUG_LOG’, true); define(‘WP_DEBUG_DISPLAY’, false);
Sau đó submit form và kiểm tra file debug.log trong thư mục /wp-content/. Các lỗi PHP sẽ được ghi lại chi tiết.
Bước 4: Kiểm Tra Xung Đột Plugin
Tắt tất cả plugin ngoại trừ plugin form đang gặp lỗi. Chuyển sang theme mặc định. Submit form để kiểm tra. Nếu form hoạt động bình thường, bật từng plugin một và kiểm tra lại cho đến khi tìm ra plugin gây xung đột.
Cách Khắc Phục Plugin Form Lỗi Ajax Submit
Sửa Lỗi Xung Đột JavaScript
Nếu phát hiện xung đột jQuery, thêm đoạn code sau vào file functions.php của theme để đảm bảo jQuery được tải đúng cách:
add_action(‘wp_enqueue_scripts’, ‘fix_jquery_conflict’); function fix_jquery_conflict() { if (!is_admin()) { wp_deregister_script(‘jquery’); wp_register_script(‘jquery’, includes_url(‘/js/jquery/jquery.js’), false, NULL, true); wp_enqueue_script(‘jquery’); } }
Đặt tham số cuối là true để tải jQuery trong footer, giúp các script khác tải trước không bị ảnh hưởng.
Cập Nhật Nonce Động
Đối với form tùy chỉnh, đảm bảo nonce được tạo mới mỗi lần tải form. Sử dụng wp_create_nonce và kiểm tra bằng wp_verify_nonce. Nếu dùng plugin cache, thêm action để refresh nonce qua ajax:
add_action(‘wp_ajax_refresh_nonce’, ‘refresh_nonce_callback’); add_action(‘wp_ajax_nopriv_refresh_nonce’, ‘refresh_nonce_callback’); function refresh_nonce_callback() { echo wp_create_nonce(‘form_nonce’); wp_die(); }
Cấu Hình Lại Ajax URL
Thêm đoạn code sau vào functions.php để đảm bảo ajaxurl luôn đúng:
add_action(‘wp_head’, ‘fix_ajaxurl’); function fix_ajaxurl() { echo ‘‘; }
Kiểm tra lại bằng Network tab sau khi thêm.
Tăng Giới Hạn Bộ Nhớ Và Thời Gian Xử Lý
Thêm vào wp-config.php trước dòng “That’s all, stop editing!”:
define(‘WP_MEMORY_LIMIT’, ‘256M’); define(‘WP_MAX_MEMORY_LIMIT’, ‘512M’); set_time_limit(120);
Nếu không có quyền chỉnh sửa wp-config.php, liên hệ hosting để tăng giới hạn.
Cấu Hình Cache Plugin
Với WP Rocket: vào Settings > Cache > Excluded Pages, thêm đường dẫn trang chứa form. Với W3 Total Cache: vào Performance > Page Cache > Excluded User Agents, thêm wp-admin/admin-ajax.php. Với LiteSpeed Cache: vào Cache > Excludes, thêm /wp-admin/admin-ajax.php.
So Sánh Các Plugin Form Về Khả Năng Xử Lý Ajax

| Plugin | Cơ chế Ajax | Lỗi thường gặp | Mức độ ổn định |
|---|---|---|---|
| Contact Form 7 | Ajax mặc định, dùng wpcf7-ajax | Xung đột jQuery, lỗi nonce | Trung bình |
| WPForms | Ajax tùy chỉnh, có fallback | Lỗi cache, xung đột script | Cao |
| Gravity Forms | Ajax qua GF_Ajax | Lỗi bộ nhớ, timeout | Cao |
| Elementor Pro Forms | Ajax qua REST API | Lỗi CORS, xung đột Elementor | Trung bình |
| Ninja Forms | Ajax qua nf-ajax | Lỗi nonce, cache | Trung bình |
Sai Lầm Thường Gặp Khi Xử Lý Plugin Form Lỗi Ajax Submit
Nhiều người dùng vội vàng cài plugin bảo trì hoặc plugin sửa lỗi tự động mà không hiểu nguyên nhân gốc rễ. Điều này thường làm tình trạng tồi tệ hơn do xung đột plugin chồng chéo. Sai lầm phổ biến thứ hai là chỉnh sửa trực tiếp file core của plugin form, dẫn đến mất hết thay đổi khi cập nhật plugin.
Sai lầm thứ ba là bỏ qua việc kiểm tra error log. Nhiều người chỉ dựa vào thông báo lỗi trên màn hình, vốn thường chung chung và không chính xác. Sai lầm thứ tư là không test trên nhiều trình duyệt khác nhau, vì lỗi có thể chỉ xuất hiện trên Chrome nhưng không trên Firefox.
Lưu Ý Quan Trọng Khi Sử Dụng Plugin Form Với Ajax

Luôn cập nhật plugin form lên phiên bản mới nhất. Các bản cập nhật thường vá lỗi bảo mật và cải thiện cơ chế ajax. Sử dụng child theme khi chỉnh sửa functions.php để tránh mất code khi cập nhật theme.
Hạn chế sử dụng quá nhiều plugin form trên cùng một website. Mỗi plugin đều enqueue script riêng, dễ gây xung đột. Nếu có thể, chỉ dùng một plugin form duy nhất và tối ưu nó.
Kiểm tra form trên thiết bị di động. Plugin form lỗi ajax submit thường xảy ra trên mobile do cơ chế touch event khác với desktop. Sử dụng công cụ Chrome DevTools để mô phỏng thiết bị di động và test.
Câu Hỏi Thường Gặp Về Plugin Form Lỗi Ajax Submit
Làm thế nào để kiểm tra plugin form có lỗi ajax submit hay không?
Mở Developer Tools (F12), chọn tab Network, filter XHR. Submit form và xem request có xuất hiện không. Nếu không có request nào, JavaScript đã bị lỗi. Nếu có request nhưng response là 0 hoặc rỗng, server không xử lý được.
Tại sao form gửi được nhưng không nhận được email?
Đây không phải lỗi ajax submit mà là lỗi gửi mail. Kiểm tra cấu hình SMTP, plugin gửi mail (WP Mail SMTP), và kiểm tra spam folder. Ajax submit chỉ đảm bảo dữ liệu được gửi lên server, không đảm bảo email được gửi thành công.
Plugin form lỗi ajax submit có ảnh hưởng đến SEO không?
Có. Nếu form không hoạt động, tỷ lệ thoát (bounce rate) tăng, thời gian ở lại trang giảm, ảnh hưởng tiêu cực đến trải nghiệm người dùng. Google coi đây là tín hiệu xấu và có thể giảm thứ hạng trang.
Có nên dùng ajax cho tất cả form không?
Không. Form đăng nhập, đăng ký, thanh toán nên dùng submit thường để đảm bảo bảo mật và tránh lỗi. Ajax phù hợp với form liên hệ, đăng ký nhận tin, survey.
Làm sao để biết lỗi do plugin form hay do theme?
Tạm thời chuyển sang theme mặc định (Twenty Twenty-Four). Nếu form hoạt động, lỗi do theme. Nếu vẫn lỗi, tắt tất cả plugin ngoại trừ plugin form. Nếu form hoạt động, bật từng plugin để tìm ra thủ phạm.
Kết Luận
Plugin form lỗi ajax submit là vấn đề kỹ thuật phổ biến nhưng hoàn toàn có thể khắc phục nếu hiểu rõ nguyên nhân. Xung đột JavaScript, lỗi nonce, cấu hình ajax URL sai, vấn đề bộ nhớ server và cache plugin là năm nguyên nhân chính. Quy trình debug gồm kiểm tra console, network tab, error log và test xung đột plugin. Giải pháp cụ thể cho từng nguyên nhân đã được trình bày chi tiết.
Việc duy trì form hoạt động ổn định không chỉ cải thiện trải nghiệm người dùng mà còn bảo vệ uy tín website. Áp dụng các biện pháp phòng ngừa như cập nhật plugin, sử dụng child theme, hạn chế plugin không cần thiết sẽ giảm thiểu rủi ro plugin form lỗi ajax submit trong tương lai. Nếu đã thử tất cả cách mà vẫn không khắc phục được, hãy liên hệ với nhà phát triển plugin hoặc chuyên gia WordPress để được hỗ trợ trực tiếp.
- Theme WordPress Elementor Widget Lỗi: Nguyên Nhân, Cách Khắc Phục Toàn Diện
- Hướng dẫn chuyển website WordPress chi tiết từ A-Z cho người mới bắt đầu
- Khắc Phục Ngay Lỗi Popup Không Đóng Được Trong Elementor: Hướng Dẫn Chi Tiết Từ A-Z
- Khắc phục lỗi WordPress wp_mail authentication failed: Nguyên nhân và giải pháp toàn diện
- Theme WordPress JavaScript Không Chạy: Nguyên Nhân Và Cách Khắc Phục Toàn Diện
















