web-dev-qa-db-fra.com

L'appel Ajax revient toujours

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');
15
Kuka

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

});
14
Jayawi Perera

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(); 
}
18
Shoaib Iqbal

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();
}
9
Alexandar Lazovic

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.

2
td-lambda

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();
}
0
Seano