web-dev-qa-db-ja.com

管理者Ajaxが戻ってきた

私はjQueryと、特にAJAXと比較的新しいです。戻り値が常に0であるという小さな問題がありますが、これは実際には成功メッセージであり、何も返さないと思います。

私はGoogleの詩を精査し、私はPHPコールバックのdie()関数を持っています、そして私はadd_actionsが正しいと信じます。

私はそれがそれに影響を与えることを疑いますが、これはフロントエンドではなく管理者にあるけれども、私はローカルホストに取り組んでいます。また、jsがエンキューされローカライズされていることも確認しました。

クロム開発者エリアに200 OKというメッセージが表示されます。

また、 http://codex.wordpress.org/AJAX_in_Plugins から基本的なAJAXをテストしたところ、0が返されました。これは、次に説明するコード以外のものではないかと思います。

今私はそれがjQueryに何かを送り返すようにしようとしています。任意の助けがいただければ幸いです。

jQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}
28
Apina

だから私はそれを解決しました。私が改善したのは、それ自体jQueryではなかった、それはコールバック関数の配置でした。私はそれをメインのプラグインファイルに移動しましたが、うまくいきました。

1
Apina

0応答は、アクションが(ajaxデータに)設定されていないか、またはアクションのコールバック関数が見つからないことを意味します。

40
helgatheviking

あなたがしなければならないのはあなたの関数の最後にdie();を追加することです。

理由ともっとここに見なさい: http://codex.wordpress.org/AJAX_in_Plugins

ノート:

  • echoを実行する前に、何かをdieする必要があります。これはサーバエラーを防ぎ、デバッグ時に役立ちます。

私は同じ問題を抱えています。そしてそれを解決しました。例のように "action"変数を送信する必要があります。

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

なぜならwp-admin/admin-ajax.phpはアクション変数のハンドラだからです。

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
2
Mcart

コンソールでこのコードを実行してみてください

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

私はあなたのJavaScriptコードに関して多くのことが間違っているのを見ることができます、そしてそれはその理由かもしれません。

1
Omar Abid

あなたがajax URLを設定するのにwp_localize_script()関数を使わないなら、admin ajaxは0を返します。私はそれがWordpressのバグだと思います。これが例です:

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

JavaScriptファイル(search.js):

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

//コード関数php

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>
0
Ngocheng

私もこの問題を抱えていました、そしてそれは私がPHP関数でreturnの代わりにechoを使っていたという事実でした。 echoに変更することで修正されました。

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

私は同じ問題を抱えていました、それを修正するために私はechoの直後の関数の最後に wp_die() を使いました。あなたのスクリプトにあなたの行動を渡すことを忘れないでください。

念のため、関数が wp_ajax_nopriv のようにwp_ajaxを使用する必要があるかどうかを確認してください。

0
Yann J

参考までに、「ajax requestから0が返されています」とグーグルでお越しの方は、オブジェクトのメソッドにajaxアクションを追加するときに、メソッドのアクセス修飾子がpublicであることを確認してください。

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_actionは、$object以外のメソッドを呼び出すことができない場合には単に沈黙します。

0
Marecky