Panggilan Ajax selalu mengembalikan 0

18

Saya punya masalah dengan AJAX mengembalikan 0 selalu!

Saya telah melakukan segalanya berdasarkan buku itu dan tidak tahu apa yang salah? Tolong bantu!!

Ini panggilan Ajax saya:

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

Dan fungsi di functions.php adalah:

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
sumber
Sudahkah Anda mencoba men - debug kode Anda? Juga gunakan admin_url( 'admin-ajax.php' )untuk mendapatkan URL AJAX, bukan URL buatan.
fuxia

Jawaban:

15

Bisakah Anda menempatkan tindakan (ajaxConversion) di Data Anda dan periksa?

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

});
Jayawi Perera
sumber
Ini masih menambahkan 0 ke konten saya entah bagaimana.
Ben Racicot
1
@ BenRacicot: Dapatkah Anda memeriksa apakah Anda memiliki pernyataan yang menghasilkan keluaran seperti gema, die (), dll dalam kode PHP Anda?
Jayawi Perera
2
Hei Jay, Ternyata menambahkan die (); untuk fungsi ajax saya memperbaikinya!
Ben Racicot
20

menggunakan wp_die(); pada akhir fungsi AJAX memperbaiki masalah bagi saya.

misalnya

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}
Shoaib Iqbal
sumber
terima kasih ... tidak tahu mengapa tetapi menggunakan just die () tidak bekerja.
Sagive SEO
10

Bagi saya triknya adalah menambahkan wp_ajax_noprivtindakan. Saya menguji skrip di satu browser ketika saya login di WP admin, dan kemudian saya mencoba skrip yang sama di Chrome dan menyadari bahwa skrip tidak berfungsi. Setelah saya masukkan wp_ajax_nopriv, semuanya mulai bekerja. :)

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
sumber
Ini, teman saya, telah menyelamatkan saya 2 jam dari frustrasi. Pelajaran lain untuk dipelajari ketika menyebarkan aplikasi Anda ke lingkungan lain T_T
Tree Nguyen
Ini sangat benar ... jika Anda masuk ke admin maka fungsi _nopriv tidak disebut
Michal Holub
2

Saya akan merekomendasikan menggunakan wp_send_json_success () dan wp_send_json_error () di sisi server. Anda tidak perlu khawatir tentang die () dll dan variabel "status" dikirim secara otomatis, ini jauh lebih bersih dengan cara ini. Sebagai contoh

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

Akan menghasilkan sesuatu seperti ini:

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

Jadi, Anda dapat dengan mudah mengekstraksi nilai-nilai dalam panggilan ajax Anda:

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

    }
}); 

Hal umum lain yang pernah saya temui adalah kesalahan ketik pada nama tindakan. Itu harus wp_ajax_nopriv_ {action} atau wp_ajax_ {action} saat login. Sebagai contoh, wp-ajax_nopriv, adalah yang pernah saya lakukan beberapa kali di masa lalu.

td-lambda
sumber
0

Bagi saya itu adalah fakta bahwa saya menggunakan returnalih-alih echodalam fungsi PHP saya. Mengubahnya untuk echomemperbaikinya.

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