Cuộc gọi Ajax luôn trả về 0


18

Tôi gặp sự cố với AJAX trả về 0 luôn!

Tôi đã làm mọi thứ trong cuốn sách và không thể tìm ra điều gì sai? Xin vui lòng giúp đỡ!!

Đây là cuộc gọi Ajax của tôi:

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

Và hàm trong Hàm.php là:

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

Bạn đã cố gắng để gỡ lỗi mã của bạn? Đồng thời sử dụng admin_url( 'admin-ajax.php' )để nhận URL AJAX, không phải một số URL đã tạo.
fuxia

Câu trả lời:


15

Bạn có thể đặt hành động (ajaxConversion) trong Dữ liệu của mình và kiểm tra không?

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

});

Điều này vẫn đang thêm 0 vào nội dung của tôi bằng cách nào đó.
Trường đua Ben

1
@BenRacicot: Bạn có thể kiểm tra xem bạn có bất kỳ câu lệnh nào xuất ra như echo, die (), v.v. trong mã PHP của bạn không?
Jayawi Perera

2
Này Jay, hóa ra thêm die (); để ajax func của tôi sửa nó!
Trường đua Ben

20

sử dụng wp_die();ở cuối hàm AJAX đã khắc phục sự cố cho tôi.

ví dụ

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

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

cảm ơn ... không biết tại sao nhưng chỉ sử dụng die () không hoạt động.
SEO Sagive

10

Đối với tôi, mẹo là thêm wp_ajax_noprivhành động. Tôi đã kiểm tra tập lệnh trên một trình duyệt khi tôi đăng nhập vào quản trị viên WP và sau đó tôi đã thử tập lệnh tương tự trong Chrome và nhận ra rằng tập lệnh không hoạt động. Sau khi tôi đặt wp_ajax_nopriv, mọi thứ bắt đầu làm việc. :)

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

Điều này, bạn của tôi, đã tiết kiệm cho tôi 2 giờ bực bội. Một bài học khác để học khi triển khai ứng dụng của bạn sang môi trường khác T_T
Tree Nguyen

Điều này rất đúng ... nếu bạn đã đăng nhập vào quản trị viên thì chức năng _nopriv không được gọi
Michal Holub

2

Tôi sẽ khuyên bạn nên sử dụng wp_send_json_success ()wp_send_json_error () ở phía máy chủ. Bạn không cần phải lo lắng về die () vv và biến "trạng thái" được gửi tự động, theo cách này sẽ sạch hơn rất nhiều. Ví dụ

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

Sẽ dẫn đến kết quả như thế này:

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

Vì vậy, sau đó bạn có thể dễ dàng trích xuất các giá trị trong lệnh gọi ajax của mình:

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

    }
}); 

Một điều phổ biến khác mà tôi đã gặp phải là lỗi chính tả trong tên hành động. Chúng phải là wp_ajax_nopriv_ {action} hoặc wp_ajax_ {action} khi đăng nhập. Ví dụ: wp-ajax_nopriv, là một trong những điều tôi đã làm nhiều lần trong quá khứ.


0

Đối với tôi, thực tế là tôi đã sử dụng returnthay vì echotrong chức năng PHP của mình. Thay đổi nó để echosửa nó.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.