Ajax 호출은 항상 0을 반환


18

AJAX가 항상 0을 반환하는 데 문제가 있습니다!

나는 책으로 모든 것을 해왔고 무엇이 잘못되었는지 알아낼 수 없습니까? 도와주세요!!

다음은 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;

그리고 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');

코드 를 디버깅 하려고 했습니까 ? 또한 admin_url( 'admin-ajax.php' )일부 구성 URL이 아닌 AJAX URL을 가져 오는 데 사용 하십시오.
fuxia

답변:


15

데이터에 작업 (ajaxConversion)을 배치하고 확인할 수 있습니까?

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

});

이것은 여전히 ​​내 콘텐츠에 0을 추가하고 있습니다.
Ben Racicot

1
@ BenRacicot : PHP 코드에서 echo, die () 등과 같은 출력이있는 문장이 있는지 확인할 수 있습니까?
Jayawi Perera

2
Jay, die () 추가 함; 내 아약스 기능에 고정!
Ben Racicot

20

wp_die();AJAX 기능 끝에서 사용 하면 문제가 해결되었습니다.

예 :

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

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

고마워 ... 왜 모르겠지만 die () 사용하면 효과가 없었습니다.
Sagive SEO

10

나를 위해 속임수는 wp_ajax_nopriv행동 을 추가하는 것이 었습니다 . WP 관리자로 로그인했을 때 하나의 브라우저에서 스크립트를 테스트 한 다음 Chrome에서 동일한 스크립트를 시도했지만 스크립트가 작동하지 않는다는 것을 깨달았습니다. 내가 넣은 후에 wp_ajax_nopriv모든 것이 작동하기 시작했습니다. :)

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

내 친구 인 이로 인해 2 시간의 좌절이 발생했습니다. 다른 환경에 응용 프로그램을 배포 할 때 배울 또 다른 교훈 T_T
Tree Nguyen

이것은 매우 사실입니다 ... 관리자로 로그인하면 _nopriv 기능이 호출되지 않습니다
Michal Holub

2

서버 측에서 wp_send_json_success ()wp_send_json_error () 를 사용하는 것이 좋습니다 . die () 등에 대해 걱정할 필요가 없으며 "status"변수가 자동으로 전송되므로이 방법이 훨씬 깨끗합니다. 예를 들어

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

다음과 같은 결과가 발생합니다.

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

따라서 아약스 호출에서 값을 쉽게 추출 할 수 있습니다.

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

    }
}); 

내가 겪었던 또 다른 일반적인 것은 작업 이름에 오타가 있습니다. 로그인 할 때 wp_ajax_nopriv_ {action} 또는 wp_ajax_ {action} 이어야합니다 . 예를 들어, wp-ajax_nopriv는 과거에 여러 번 수행 한 것입니다.


0

나에게 그것은 PHP 기능 return대신에 사용하고 있다는 사실이었습니다 echo. echo수정 하기 위해 변경하십시오 .

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.