A chamada Ajax sempre retorna 0


18

Eu tenho um problema com o AJAX retornando 0 sempre!

Eu fiz tudo pelo livro e não consigo descobrir o que está errado? Por favor ajude!!

Aqui está minha chamada do 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 a função em 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');

Você já tentou depurar seu código? Use também admin_url( 'admin-ajax.php' )para obter o URL AJAX, não um URL inventado.
fuxia

Respostas:


15

Você poderia colocar a ação (ajaxConversion) nos seus dados e verificar?

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

});

Isso ainda está adicionando um 0 ao meu conteúdo de alguma forma.
Ben Racicot 26/03

1
@ BenRacicot: Você pode verificar se você tem alguma declaração que produza como eco, die (), etc no seu código PHP?
Jayawi Perera

2
Ei Jay, Acontece que adicionamos die (); para o meu ajax func corrigido!
precisa

20

usar wp_die();no final da função AJAX corrigiu o problema para mim.

por exemplo

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

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

obrigado ... não sei porque, mas usando apenas die () não funcionou.
Sagive SEO

10

Para mim, o truque era adicionar wp_ajax_noprivação. Testei o script em um navegador quando estava logado no WP admin, depois tentei o mesmo script no Chrome e percebi que o script não funciona. Depois que eu coloquei wp_ajax_nopriv, tudo começou a funcionar. :)

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

Isso, meu amigo, me salvou 2 horas de frustrante. Outra lição a aprender quando implantar seu aplicativo para outro T_T ambiente
Árvore Nguyen

Isto é muito verdade ... se você está conectado para administrador, em seguida, _nopriv função não é chamada
Michal Holub

2

Eu recomendaria usar wp_send_json_success () e wp_send_json_error () no lado do servidor. Você não precisa se preocupar com die () etc, e a variável "status" é enviada automaticamente, é muito mais limpo dessa maneira. Por exemplo

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

Irá resultar em algo como isto:

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

Então você pode facilmente extrair os valores da sua chamada 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);
         }

    }
}); 

Outra coisa comum que encontrei são erros de digitação no nome da ação. Eles devem ser wp_ajax_nopriv_ {action} ou wp_ajax_ {action} quando estiver logado. Por exemplo, wp-ajax_nopriv, é o que eu fiz várias vezes no passado.


0

Para mim, foi o fato de eu estar usando, em returnvez de echona minha função PHP. Alterando para echocorrigi-lo.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.