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を追加しています。
ベンラシコット14年

1
@BenRacicot:PHPコードにecho、die()などの出力を行うステートメントがあるかどうかを確認できますか?
ジャヤウィペレラ14

2
ジェイさん、die()を追加することがわかりました。私のajax funcに修正しました!
ベンラシコット14年

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管理者にログインしたときに1つのブラウザーでスクリプトをテストし、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関数が呼び出されていない管理者にログインしている場合、これは...非常に本当です
ミハル・ホルブ

2

サーバー側でwp_send_json_success()およびwp_send_json_error()を使用することをお勧めします。die()などを心配する必要はなく、「ステータス」変数が自動的に送信されるため、この方法ではるかにクリーンになります。例えば

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

次のような結果になります。

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

したがって、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);
         }

    }
}); 

私が遭遇したもう1つの一般的なことは、アクション名のタイプミスです。ログインするときは、wp_ajax_nopriv_ {action}または wp_ajax_ {action}である必要があります。たとえば、wp-ajax_noprivは、過去に何度か行ったものです。


0

私にとっては、PHP関数のreturn代わりに使用していたという事実でしたechoecho修正して修正しました。

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.