J'ai un problème avec AJAX qui renvoie 0 toujours!
J'ai tout fait par le livre et je ne peux pas comprendre ce qui ne va pas? S'il vous plaît aider!
Voici mon appel Ajax:
//Pass data through AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // our PHP handler file
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
Et la fonction dans functions.php est:
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');
Pourriez-vous placer l'action (ajaxConversion) dans vos données et vérifier?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
l'utilisation de wp_die();
à la fin de la fonction AJAX a corrigé le problème pour moi.
par exemple
add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );
function my_ajax_function(){
echo json_encode($myvar);
wp_die();
}
Pour moi, le truc était d'ajouter l'action wp_ajax_nopriv
. J'ai testé le script sur un navigateur lorsque j'étais connecté à WP admin, puis j'ai essayé le même script sous Chrome et me suis rendu compte qu'il ne fonctionnait pas. Après avoir mis wp_ajax_nopriv
, tout a commencé à fonctionner. :)
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();
}
Je recommanderais d'utiliser wp_send_json_success () et wp_send_json_error () côté serveur. Vous n'avez pas besoin de vous soucier de die (), etc., et la variable "status" est envoyée automatiquement, c'est beaucoup plus propre de cette façon. Par exemple
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
Résultera en quelque chose comme ceci:
{
"success":true,
"data":{"amount":125}
}
Vous pouvez donc extraire facilement les valeurs de votre appel 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);
}
}
});
Une autre chose commune que j'ai rencontrée est les fautes de frappe dans le nom de l'action. Ils doivent être wp_ajax_nopriv_ {action} ou wp_ajax_ {action} lors de la connexion. Par exemple, wp-ajax_nopriv est celui que j'ai déjà utilisé à plusieurs reprises.
Pour moi, c’était le fait que j’utilisais return
au lieu de echo
dans ma fonction PHP. Le changer en echo
le corrige.
function doAjax() {
$result = getPosts();
echo json_encode($result, true);
die();
}