Afișarea erorilor PHP din admin-ajax.php

26 mar. 2018, 13:19:55
Vizualizări: 23.2K
Voturi: 7

Avem câteva endpoint-uri personalizate configurate care fac diverse lucruri, pe care le accesăm prin /wp/wp-admin/admin-ajax.php?action=some_action

Cu toate acestea, ori de câte ori apare o eroare în timpul dezvoltării, cum ar fi erori de sintaxă, logice, fatale etc., primim doar "500 Internal Server Error"

Pe toate celelalte pagini ale site-ului, când apare o eroare, ni se afișează eroarea PHP.

Trebuie să deschidem fișierul PHP Log pentru a vedea eroarea.

Există ceva în WordPress care dezactivează afișarea erorilor pe aceste URL-uri? și dacă da, cum putem preveni acest lucru pentru a permite afișarea erorilor în browser?

5
Comentarii

Dacă te uiți la răspunsul în fila Network din instrumentele de dezvoltare ale browserului, vei vedea eroarea.

Jacob Peattie Jacob Peattie
26 mar. 2018 13:46:48

Aceasta este toată problema - primim doar un răspuns "500 internal server error" - indiferent de cum ajungem acolo, chiar dacă încarci URL-ul direct în browser

owenmelbz owenmelbz
26 mar. 2018 15:09:35

@bueltge Scuze, am citit, dar nu înțeleg ce este relevant? Nu văd nicăieri că ar discuta de ce mesajele de eroare nu sunt afișate?

owenmelbz owenmelbz
26 mar. 2018 17:21:26

Erorile din cererile ajax nu sunt niciodată afișate direct în browser. Dacă raportarea erorilor este activată, poți vedea mesajele de eroare în consola de rețea. Link-ul lui Bueltge ajută la depanare în acest fel.

Luckyfella Luckyfella
15 dec. 2018 01:50:03
Toate răspunsurile la întrebare 3
5

WordPress, în mod implicit, ascunde erorile pentru cererile AJAX. Acest lucru poate fi confirmat din fișierul sursă wp-includes/load.php#L352, aici:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
    @ini_set( 'display_errors', 0 );
}

Observați că funcția wp_doing_ajax() este utilizată în instrucțiunea condițională, astfel încât display_errors este setat.

Pentru a ocoli această limitare, trebuie să activați raportarea erorilor manual în partea superioară a funcției AJAX, așa cum a sugerat @Friss.

4 iul. 2018 16:46:31
Comentarii

MULȚUMESC!!! Este clar că nu vrem să modificăm nucleul, dar într-un mediu local, doar în scopul depanării, când apelul ajax este făcut de un plugin cu care nu doriți să vă interferezi sau nu aveți timp să analizați - comentarea temporară a liniei menționate mai sus în /wp-includes/load.php va permite afișarea unor mesaje de eroare mai specifice și vă va ajuta să identificați sursa problemei.

squarecandy squarecandy
25 sept. 2019 22:58:07

Există un filtru în partea de sus a load.php care ocoleste această verificare: add_filter( 'enable_wp_debug_mode_checks', '__return_false' );

CragMonkey CragMonkey
25 apr. 2020 21:48:13

@Cragmonkey Te rog să explici cum s-ar putea folosi acest hook în apelul ajax.

Rahil Wazir Rahil Wazir
10 mai 2020 04:58:56

@Rahil Wazir ... Ai putea crea temporar acel hook în altă parte din plugin-ul tău în timpul depanării.

CragMonkey CragMonkey
12 mai 2020 01:36:32

Pentru wp v6.5 este linia 617

Fabrice Fabiyi Fabrice Fabiyi
5 feb. 2025 11:57:06
2

Puteți încerca să adăugați aceste două linii chiar la începutul fișierului script

error_reporting(E_ALL); 
ini_set("display_errors", 1);

Aceasta instruiește PHP să raporteze toate tipurile de erori și suprascrie setările implicite pentru a le afișa.

27 mar. 2018 00:38:14
Comentarii

Bună, Aceasta activează raportarea erorilor - totuși, încercăm să aflăm de ce este dezactivată pentru admin-ajax.php, deoarece dacă o setăm în partea de jos a wp-config de exemplu, este suprascrisă undeva pentru apelurile ajax

owenmelbz owenmelbz
27 mar. 2018 11:47:21

a funcționat, mulțumesc prietene

Sharifur Robin Sharifur Robin
2 apr. 2024 20:29:01
2
-1

Puteți încerca să utilizați WP_Ajax_Response

$response = array(
   'what'=>'stuff',
   'action'=>'delete_something',
   'id'=>new WP_Error('oops','Am avut un accident.'),
   'data'=>'Hopa, a apărut o problemă!'
);
$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();

Citiți mai multe https://codex.wordpress.org/Function_Reference/WP_Ajax_Response

26 mar. 2018 13:29:41
Comentarii

Ne pare rău, dar nu asta cerem - problema noastră este că erorile PHP nu sunt afișate, când avem nevoie să le vedem

owenmelbz owenmelbz
26 mar. 2018 15:10:31

dar dacă apar erori SQL sau alte tipuri de erori?

amilaishere amilaishere
3 feb. 2021 13:05:39