L'appel Ajax renvoie toujours 0

12

J'ai un problème avec AJAX qui renvoie 0 toujours!

J'ai tout fait dans les règles et je ne peux pas comprendre ce qui ne va pas? S'il vous plaît, aidez!

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');
    
posée Kuka 30.08.2013 - 12:23

5 réponses

14

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);
  } 

});
    
réponse donnée Jayawi Perera 30.08.2013 - 12:29
15

utiliser wp_die(); à la fin de la fonction AJAX a résolu 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(); 
}
    
réponse donnée Shoaib Iqbal 08.07.2015 - 09:14
8

Pour moi, l'astuce consistait à ajouter wp_ajax_nopriv action. 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 je me suis rendu compte que le script 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();
}
    
réponse donnée Alexandar Lazovic 07.02.2016 - 23:29
2

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
    ));
}

aura comme résultat quelque chose comme ceci:

{
 "success":true,
 "data":{"amount":125}
}

Vous pouvez alors 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 courante que j'ai rencontrée concerne 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 un exemple que j'ai déjà utilisé à plusieurs reprises.

    
réponse donnée td-lambda 18.02.2017 - 20:07
0

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();
}
    
réponse donnée Seano 29.03.2016 - 21:10

Lire d'autres questions sur les étiquettes