fix(frontend): stop infinite pagination admin-ajax 400 spam
Hardened list-page infinite scroll so it no longer auto-fires three admin-ajax requests on first paint, returns machine-readable nonce errors, localizes aksrtData earlier for core modules, and ignores UI-only data-action clicks.
This commit is contained in:
1 parent
964a6c9397
commit
bf49982d16
4 files changed
+179
-66
No files matched your search
@@ -626,10 +626,24 @@
|
||||
// §10.11 — [data-action] / [ajax-action] universal buttons
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
// Only these data-action values are network AJAX. UI-only actions
|
||||
// (toggle-theme, editor toolbar, download, etc.) must not hit admin-ajax.
|
||||
var DATA_ACTION_AJAX = {
|
||||
like: true,
|
||||
favorite: true,
|
||||
follow: true,
|
||||
checkin: true
|
||||
};
|
||||
|
||||
document.addEventListener('click', function (e) {
|
||||
// [data-action] — like/follow/checkin with localStorage de-dup
|
||||
var btn = e.target.closest('[data-action]');
|
||||
if (btn) {
|
||||
var dataAction = btn.getAttribute('data-action') || '';
|
||||
if (!DATA_ACTION_AJAX[dataAction]) {
|
||||
// Leave non-AJAX data-action handlers (theme toggle, toolbar, download) alone.
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
handleDataAction(btn);
|
||||
return;
|
||||
@@ -648,6 +662,8 @@
|
||||
if (btn.classList.contains('is-loading')) return;
|
||||
|
||||
var action = btn.getAttribute('data-action');
|
||||
if (!action || !DATA_ACTION_AJAX[action]) return;
|
||||
|
||||
var id = btn.getAttribute('data-id') || '';
|
||||
var storageKey = 'aksrt_action_' + action + '_' + id;
|
||||
|
||||
@@ -663,9 +679,14 @@
|
||||
btn.classList.add('is-loading');
|
||||
|
||||
var ajaxUrl = (window.aksrtData && aksrtData.ajaxUrl) || '/wp-admin/admin-ajax.php';
|
||||
if (!(window.aksrtData && aksrtData.nonce)) {
|
||||
btn.classList.remove('is-loading');
|
||||
aksrt.notyf(__('action_failed', '操作失败'), 'danger');
|
||||
return;
|
||||
}
|
||||
var params = new URLSearchParams();
|
||||
params.set('action', 'aksrt_' + action);
|
||||
if (window.aksrtData && aksrtData.nonce) params.set('nonce', aksrtData.nonce);
|
||||
params.set('nonce', aksrtData.nonce);
|
||||
params.set('id', id);
|
||||
|
||||
var extraData = btn.getAttribute('data-action-data');
|
||||
|
||||
Reference in new issue
Block a user