Apelul Ajax returnează mereu 0
Am o problemă cu AJAX care returnează mereu 0!
Am făcut totul conform documentației și nu-mi dau seama ce este greșit? Vă rog să mă ajutați!!
Iată apelul meu Ajax:
//Transmitem datele prin AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // fișierul nostru handler PHP
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
Iar funcția din functions.php este:
function ajaxConversion(){
$amount = mysql_real_escape_string($_POST['amount']);
echo $amount;
die();
};
add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');
Poți să plasezi acțiunea (ajaxConversion) în Datele tale și să verifici?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});

@BenRacicot : Poți verifica dacă ai vreo declarație care face output precum echo, die(), etc în codul tău PHP?

Pentru mine, soluția a fost să adaug acțiunea wp_ajax_nopriv
. Am testat scriptul într-un browser în timp ce eram autentificat în administrarea WordPress, apoi am încercat același script în Chrome și am realizat că nu funcționează. După ce am adăugat wp_ajax_nopriv
, totul a început să meargă. :)
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
function erase_uploaded_images() {
$attach_id = filter_input( INPUT_POST, 'attach_id' );
wp_delete_attachment( $attach_id );
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
$_SESSION['uploaded_images'] = $array_attachments;
}
wp_die();
}

V-aș recomanda să folosiți wp_send_json_success() și wp_send_json_error() pe partea de server.
Nu trebuie să vă faceți griji pentru die() etc, iar variabila "status" este trimisă automat, este mult mai curat în acest fel. De exemplu:
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
Va rezulta în ceva de genul acesta:
{
"success":true,
"data":{"amount":125}
}
Așadar, puteți extrage cu ușurință valorile în apelul vostru AJAX:
jQuery.ajax({
type : 'post',
data : {
action: 'ajaxConversion',
//nonce : ajax.nonce
},
dataType : 'json',
url : ajax.ajaxurl,
success : function(data){
if(data.success) {
alert(data.amount);
} else {
alert(data.data.message);
}
}
});
Un alt lucru comun întâlnit sunt greșelile de scriere în numele acțiunii. Acestea ar trebui să fie wp_ajax_nopriv_{action} sau wp_ajax_{action} când sunteți autentificat. De exemplu, wp-ajax_nopriv, este o greșeală pe care am făcut-o de mai multe ori în trecut.

S-ar putea să uiți să adaugi următoarea linie:
add_action("wp_ajax_your_ajax_function", "your_ajax_function");
Fără această linie, funcția ajax nu va fi declanșată.
Iată funcția ta ajax:
function your_ajax_function(){ $result = json_encode($result); echo $result; }

Lucru important de făcut, adăugarea corectă a acțiunii (hook) în functions.php
Am întâmpinat aceeași problemă, am încercat toate metodele, dar am omis un lucru simplu - să includ fișierul cu acțiunea în functions.php
// Adăugăm acțiuni pentru administrare și utilizatori neautentificați
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
// Funcția pentru ștergerea imaginilor încărcate
function erase_uploaded_images() {
// Obținem ID-ul atașamentului din cererea POST
$attach_id = filter_input( INPUT_POST, 'attach_id' );
// Ștergem atașamentul
wp_delete_attachment( $attach_id );
// Dacă există imagini încărcate în sesiune
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
// Căutăm și eliminăm ID-ul atașamentului din array
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
// Actualizăm sesiunea cu array-ul modificat
$_SESSION['uploaded_images'] = $array_attachments;
}
// Terminăm execuția scriptului
wp_die();
}
