Ajax-Aufruf gibt immer 0 zurück

18

Ich habe ein Problem damit, dass AJAX immer 0 zurückgibt!

Ich habe alles nach dem Buch gemacht und kann nicht herausfinden, was los ist? Bitte helfen Sie!

Hier ist mein Ajax-Anruf:

//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;

Und die Funktion in functions.php ist:

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');
Kuka
quelle
Haben Sie versucht, Ihren Code zu debuggen ? Dient auch admin_url( 'admin-ajax.php' )zum Abrufen der AJAX-URL, nicht einer erfundenen URL.
Fuxia

Antworten:

15

Könnten Sie die Aktion (ajaxConversion) in Ihre Daten einfügen und überprüfen?

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

});
Jayawi Perera
quelle
Dies hängt immer noch eine 0 an meinen Inhalt an.
Ben Racicot
1
@BenRacicot: Kannst du überprüfen, ob du irgendwelche Anweisungen in deinem PHP-Code hast, die wie echo, die () usw. ausgegeben werden?
Jayawi Perera
2
Hey Jay, es stellt sich heraus, dass du die hinzufügst (); an meiner ajax func behoben!
Ben Racicot
20

Mit wp_die();am Ende der AJAX-Funktion wurde das Problem für mich behoben.

z.B

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}
Shoaib Iqbal
quelle
danke ... weiß nicht warum, aber mit nur die () hat nicht funktioniert.
Sagive SEO
10

Für mich war der Trick, wp_ajax_noprivAction hinzuzufügen . Ich habe das Skript in einem Browser getestet, als ich in WP admin angemeldet war. Dann habe ich dasselbe Skript in Chrome ausprobiert und festgestellt, dass das Skript nicht funktioniert. Nachdem ich gesetzt hatte wp_ajax_nopriv, fing alles an zu arbeiten. :)

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();
}
Alexandar Lazovic
quelle
Das, mein Freund, hat mir 2 Stunden Frust erspart. Eine weitere Lektion, die Sie lernen sollten, wenn Sie Ihre Anwendung in einer anderen Umgebung bereitstellen. T_T
Tree Nguyen
Das ist sehr wahr ... wenn du bei admin eingeloggt bist, wird die Funktion _nopriv nicht aufgerufen
Michal Holub
2

Ich würde empfehlen, wp_send_json_success () und wp_send_json_error () auf der Serverseite zu verwenden. Sie brauchen sich keine Gedanken über die () usw. zu machen, und die "Status" -Variable wird automatisch gesendet. Auf diese Weise wird es viel sauberer. Beispielsweise

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

Wird zu so etwas führen:

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

Dann können Sie die Werte in Ihrem Ajax-Aufruf ganz einfach extrahieren:

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

    }
}); 

Eine andere häufige Sache, auf die ich gestoßen bin, sind Tippfehler im Aktionsnamen. Sie sollten wp_ajax_nopriv_ {action} oder wp_ajax_ {action} lauten, wenn Sie angemeldet sind. Zum Beispiel wp-ajax_nopriv, das habe ich in der Vergangenheit schon mehrmals gemacht.

td-lambda
quelle
0

Für mich war es die Tatsache, dass ich in meiner PHP-Funktion returnanstatt echoverwendete. Ändern Sie es, um es zu echobeheben.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Seano
quelle