管理者Ajaxは0を返しています


28

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

Google-verseを精査し、PHPコールバックにdie()関数があり、add_actionsが正しいと信じています。

私はローカルホストで作業していますが、それが影響するのではないかと疑っていますが、これはすべてフロントエンドではなく管理者にあります。また、jsがキューに登録され、ローカライズされていることも確認しました。

Chrome開発者エリアで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();


}

1
ajaxurlが適切に設定されていることを確認しましたか?
アンドリューバーテル

ブラウザコンソールにエラーが表示されていますか?もしそうなら、彼らは何ですか?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()奇妙に見える。
FUXIA

Andrew、はい、それは正しいと思います。ChromeInspectorのリクエストURLにdomain / wp-admin / admin-ajax.phpが表示されています
Apina

@s_ha_dumエラー表示なし
アピナ

回答:


40

0応答手段のいずれかのアクションが設定(AJAXデータの場合)、またはアクションのコールバック関数が見つからないことをされていないこと。


2
ええ、これは正解です。die()を最後に追加すると、スクリプトが終了します。出力のENDに0が追加されている場合、その答えは技術的には正しいですが、「0」のみを取得する場合は何も返されなかったことを意味し、この回答に記載されているエラーが発生しています。
ハイブリッドWeb開発

または、ajaxリクエストを処理するphpで意図的に何も返さなかった。何かをエコーするようにしてください.always。そうでない場合は、キャプチャに使用してください。
ソロモンクロソン

20

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

理由などはこちらをご覧ください:http : //codex.wordpress.org/AJAX_in_Plugins

ノート:

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

7
これは、WP AJAX 0問題に対する答えです。
ベンラシコット14年

実際に、die()何かをエコーアウトせずに追加するだけの場合、これにより500 Internal Server Errorが返さ0れ、に戻りwp-admin/admin-ajax.phpます。値を設定するだけで、何も返す必要がない場合でも、常に何かをエコーアウトする必要があります。あなたは何をエコーしないし、そうでない場合は、die()あなたが使用する必要があり.always()、それはになりません原因、それをキャプチャするために.done()、それがになり.fail()、それは= 500エラーは何もせずに死ぬので。
ソロモンクロソン

いくつかのリンクまたは作業コードがありますので、ご覧ください。@SolomonClosson
フランシスココラレスモラレス

私の答えはすべて、ライブ環境でテストされています。それはこれをテストすることは非常に簡単です、ちょうど行うdie();にAJAX機能でfunctions.phpこの前に何をエコーせずに、ファイル、およびAjaxを経由してアクションを呼び出し、例えば:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
ソロモンClosson

失敗が表示され、応答が500内部サーバーエラーになります。
ソロモンクロッソン

2

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


4
どうやってやったのか見せてくれますか?
フランシスココラレスモラレス14年

1
私はこれと同じ問題を抱えていますが、これをどのように修正したか教えていただけますか?
ジェレミー14年


2

同じ問題が発生しました。そしてそれを解決しました。例のように「アクション」変数を送信する必要があります。

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

4
OP actionパラメーターを送信します。これはあなたのために働いたかもしれないが、ここでは問題ではなかった。
s_ha_dum

1

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

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

あなたのJavaScriptコードについて多くの間違ったことを見ることができます。


よくわからないことがたくさんあります。私が理解していること:ReadyState 4、ステータス200、responseText "0"。そして、応答0が表示されます。特定の何かがある場合、ここで検索する必要がありますか?コードに問題がある場合は、それらを指摘してください。私はそれらを調べることができます。私はまだjQueryを学んでいます。
アピナ

あなたのサイトはライブで稼働していますか?
オマーアビッド

いいえ、ローカルホストです
アピナ

わかりにくい。console.info(ajaxurl);を実行してみてください。そしてそれが何を与えるか見てください?
オマーアビッド

1
「でajaxurlを交換してみlocalhostの/ WP-管理者/管理者-ajax.php」とそれが与えるものを参照してください
オマールABID

1

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

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

0

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

確認するには、関数でwp_ajax_noprivlike を使用する必要があるかどうかを確認してくださいwp_ajax


0

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

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

add_action以外でメソッドを呼び出せない場合は、黙ってください$object


0

wp_localize_script()関数を使用してajax urlを設定しない場合、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
});

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

コードを投稿するだけでは良くありません。このコードが何をするのか説明してください。
bravokeyl

重要:$ date = isset($ _ POST ['date'])?$ _POST ['date']:0; そして、関数die();
Ngocheng

0

エラー0 :)、アクション=> 'アクション'を受け取る人

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });

-1
やってみてください:

add_action( 'init'、 'ly_form_ajax_init');


関数ly_form_ajax_init(){
    wp_register_script( 'ly-form-ajax-script'、plugins_url()。 '/ ly-form / js / ly-script.js'、array( 'jquery'));
    wp_enqueue_script( 'ly-form-ajax-script');

    wp_localize_script( 'ly-form-ajax-script'、 'ly_form_ajax_object'、array(
        'ajaxurl' => admin_url( 'admin-ajax.php')、
        'redirecturl' => home_url()、
        'loadingmessage' => __( '')
    ));
}
//アクションは:contact_ajax
add_action( 'wp_ajax_contact_ajax'、 'my_function');
add_action( 'wp_ajax_nopriv_contact_ajax'、 'my_function');

関数my_function(){
    ob_clean();
    echo "http://sanvatvungcao.com";
    wp_die();
}

/ **
 *このようなページ内の短いコード:[ly-form]
 * @param type $ atts
 * @param type $ content
 * @return string
 * /
function ly_form_shortcode($ atts、$ content = ""){
    echo html_form_code();
}
add_shortcode( 'ly-form'、 'ly_form_shortcode');

// HTMLフォームが表示され、
関数html_form_code(){
    $ html = "";
    $ html。= '';
    $ html。= '';

    $ html。= '        

Họđệm*

'; $ html。= '

十 *

'; $ html。= '

ỉachỉ*

'; $ html。= '

Eメール *

'; $ html。= '

ニズン* dg

'; $ html。= ''; $ html。= ''; $ html。= ''; $ html。= ''; return $ html; } そしてここにjs(ly-script.js): (function($){ $(document).ready(function(){ // AJAXフォーム送信を実行します $( 'form.ly-form-ex')。on( 'submit'、function(e){ e.preventDefault(); $( '#loading')。html( 'loading ...'); var dataString = {action: 'contact_ajax'}; $ .ajax({ タイプ:「POST」、 url:ly_form_ajax_object.ajaxurl、 データ:dataString、 成功:関数(データ){ $( '#loading')。html(data); }、 エラー:関数(errorThrown){ alert(errorThrown); } }); }); }); //準備完了 })(jQuery);

あなたに役立つことを願っています、ベスト


理由を説明したいと思うかもしれません:)
kaiser

ここの一番下の行はob_clean()かもしれません。関数。あなたができることと体験すること
リー・ヴァン・ヴ

-2

ifステートメントを追加してみてください:

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function

1
それはどのように問題を解決しますか?受け入れられた回答と元のコードに注意してください。
FUXIA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.