La chiamata Ajax restituisce sempre 0


18

Ho un problema con AJAX che restituisce sempre 0!

Ho fatto tutto dal libro e non riesco a capire cosa c'è che non va? Per favore aiuto!!

Ecco la mia chiamata 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;

E la funzione in Functions.php è:

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

Hai provato a eseguire il debug del tuo codice? Utilizzalo anche admin_url( 'admin-ajax.php' )per ottenere l'URL AJAX, non un URL inventato.
fuxia

Risposte:


15

Potresti inserire l'azione (ajaxConversion) nei tuoi dati e controllare?

jQuery.ajax({
  type:"POST",
  url: ajaxurl,
  data: {
      action: "ajaxConversion",
      amount: amountToConvert
  },
  success:function(data){
  alert(data);
  },
  error: function(errorThrown){
      alert(errorThrown);
  } 

});

Questo sta ancora aggiungendo uno 0 al mio contenuto in qualche modo.
Ben Racicot,

1
@BenRacicot: Puoi verificare se nel tuo codice PHP ci sono delle istruzioni che producono output come echo, die (), ecc.?
Jayawi Perera,

2
Ehi Jay, risulta che aggiunge die (); per il mio ajax func risolto!
Ben Racicot,

20

l'utilizzo wp_die();alla fine della funzione AJAX ha risolto il problema per me.

per esempio

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}

grazie ... non so perché ma l'utilizzo di die () non ha funzionato.
Sagive SEO,

10

Per me il trucco era aggiungere wp_ajax_noprivazione. Ho testato lo script su un browser quando sono stato effettuato l'accesso all'amministratore di WP, quindi ho provato lo stesso script in Chrome e mi sono reso conto che lo script non funziona. Dopo che ho messo wp_ajax_nopriv, tutto ha iniziato a funzionare. :)

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

Questo, amico mio, mi ha risparmiato 2 ore di frustrazione. Un'altra lezione da imparare quando si distribuisce l'applicazione in un altro ambiente T_T
Tree Nguyen,

Questo è molto vero ... se si è effettuato l'accesso all'amministratore, la funzione _nopriv non viene chiamata
Michal Holub

2

Consiglierei di usare wp_send_json_success () e wp_send_json_error () sul lato server. Non devi preoccuparti di die () ecc. E la variabile "status" viene inviata automaticamente, è molto più pulita in questo modo. Per esempio

function ajaxConversion(){
    // ...
    wp_send_json_success(array(
      'amount' => $amount
    ));
}

Si tradurrà in qualcosa del genere:

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

Quindi puoi facilmente estrarre i valori nella tua chiamata 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'altra cosa comune in cui mi sono imbattuto sono errori di battitura nel nome dell'azione. Dovrebbero essere wp_ajax_nopriv_ {action} o wp_ajax_ {action} al momento dell'accesso . Ad esempio, wp-ajax_nopriv, è uno che ho fatto più volte in passato.


0

Per me era il fatto che stavo usando returninvece che echonella mia funzione PHP. Modificandolo per echorisolverlo.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.