La chiamata Ajax ritorna sempre 0

30 ago 2013, 13:23:04
Visualizzazioni: 77.7K
Voti: 27

Ho un problema con AJAX che ritorna sempre 0!

Ho fatto tutto secondo le regole e non riesco a capire dove sia l'errore. Per favore aiuto!!

Ecco la mia chiamata Ajax:

//Passa i dati attraverso AJAX
var amountToConvert = price;

jQuery.ajax({
      type:"POST",
      url: "../../wp-admin/admin-ajax.php", // il nostro file PHP handler
      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');
1
Commenti

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

fuxia fuxia
30 ago 2013 13:26:36
Tutte le risposte alla domanda 7
1
30

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

esempio:

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}
8 lug 2015 10:14:31
Commenti

grazie... non so perché ma usare solo die() non ha funzionato.

Sagive Sagive
12 lug 2015 11:38:32
3
16

Puoi inserire l'azione (ajaxConversion) nei tuoi Dati e verificare?

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

});
30 ago 2013 13:29:45
Commenti

Sta ancora aggiungendo uno 0 al mio contenuto in qualche modo.

Ben Racicot Ben Racicot
26 mar 2014 17:55:08

@BenRacicot : Puoi verificare se hai dichiarazioni che producono output come echo, die(), ecc. nel tuo codice PHP?

Jayawi Perera Jayawi Perera
27 mar 2014 05:26:48

Ehi Jay, si è risolto aggiungendo die(); alla mia funzione ajax!

Ben Racicot Ben Racicot
27 mar 2014 15:46:11
2
12

Per me il trucco è stato aggiungere l'azione wp_ajax_nopriv. Ho testato lo script su un browser mentre ero loggato nell'admin di WP, e poi ho provato lo stesso script in Chrome e mi sono reso conto che non funzionava. Dopo aver inserito 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();
}
8 feb 2016 00:29:17
Commenti

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

Tree Nguyen Tree Nguyen
1 giu 2017 06:49:03

Questo è verissimo...se sei loggato come admin allora la funzione _nopriv non viene chiamata

Michal Holub Michal Holub
7 nov 2017 15:48:30
1
10

Raccomando di utilizzare wp_send_json_success() e wp_send_json_error() lato server. Non c'è bisogno di preoccuparsi di die() ecc. e la variabile "status" viene inviata automaticamente, è molto più pulito in questo modo. Ad esempio:

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

Risulterà 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 altro errore comune in cui mi sono imbattuto sono i refusi nel nome dell'azione. Dovrebbero essere wp_ajax_nopriv_{azione} o wp_ajax_{azione} quando si è loggati. Ad esempio, wp-ajax_nopriv è un errore che ho fatto diverse volte in passato.

18 feb 2017 21:07:43
Commenti

questa qui dovrebbe essere la risposta corretta e accettata. fantastico!

eballeste eballeste
11 feb 2020 19:32:59
0

Per me era il fatto che stavo usando return invece di echo nella mia funzione PHP. Cambiandolo in echo ho risolto il problema.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
29 mar 2016 22:10:29
0

Potresti dimenticare di aggiungere la seguente riga:

add_action("wp_ajax_your_ajax_function", "your_ajax_function");

Senza la riga sopra, l'ajax non verrà attivato.

Ecco la tua funzione ajax

function your_ajax_function(){ $result = json_encode($result); echo $result; }

24 dic 2020 16:50:14
0

Cosa importante da fare, aggiungi correttamente l'hook action nel functions.php Ho affrontato gli stessi problemi, ho provato tutti questi metodi, ma mi mancava una cosa semplice: dovevo includere il mio file di azione nel functions.php

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();
}
29 nov 2023 17:39:36