6

データベース内の一時的なレコードの値を返すためにPHP関数を呼び出すAJAX関数がWordPressにあります。

jQueryを使用して関数を呼び出すと、結果が返されますが、値には常に追加の0(ゼロ)が追加されます。

これが私のjQuery関数です:

(function($) {
    $(document).ready( function() {

        var AdvancedDashboardWidget = function(element, options)
        {
            var ele = $(element);
            var settings = $.extend({
                action: '',
                service: '',
                countof: '',
                query:   '',
                callback:''
            }, options || {});
            this.count=0;
            var url='';
            switch(settings.service)
            {
                case 'facebook':
                    if(settings.countof=='likes' || settings.countof=='talks')
                    {
                        ajaxCall(action,ele,settings);  
                    }
            }
        };

    var ajaxCall = function(action,ele,settings){
        opts = {
            url: ajaxurl, // ajaxurl is defined by WordPress and points to /wp-admin/admin-ajax.php
            type: 'POST',
            async: true,
            cache: false,
            dataType: 'json',
            data:{
                action: settings.action // Tell WordPress how to handle this ajax request
            },
            success:function(response) {
                //alert(response);
                ele.html(response);
                return; 
            },
            error: function(xhr,textStatus,e) {  // This can be expanded to provide more information
                alert(e);
                //alert('There was an error');
                return; 
            }
        };
        $.ajax(opts);
    };


        $.fn.advanceddashboardwidget = function(options)
        {
            return this.each(function()
            {
                var element = $(this);

                // Return early if this element already has a plugin instance
                if (element.data('advanceddashboardwidget')) return;

                // pass options to plugin constructor
                var advanceddashboardwidget = new AdvancedDashboardWidget(this, options);

                // Store plugin object in this element's data
                element.data('advanceddashboardwidget', advanceddashboardwidget);
            });
        };

    });
})(jQuery);

関係するヘルパー関数は他にもありますが、これはWordPressと通信してPHP関数の値を返すメインのjQuery関数です。

問題は、値が「」として返される場合、99たとえば「」として返されることです990

jQueryが呼び出しているPHP関数は次のとおりです。

/**
* Get Facebook Likes
*/

public function get_facebook_likes(){

    echo 99;
}

上記を変更するreturn 99;と、プレーン0を受け取ります

4

3 に答える 3

8

関数はwp_send_jsonを使用してPHPをJSONとしてエンコードし、AJAXリクエストハンドラーに送り返す必要があります。これにより、後続のPHPの実行も停止するため、exitまたはdieを使用する必要はありません。

したがって、特定の例では、次を使用します。

/**
* Get Facebook Likes
*/

public function get_facebook_likes(){
   wp_send_json(99);
}
于 2013-06-06T14:05:03.707 に答える
1

これは古い質問ですが、私はこれに答えるつもりです。wp_send_json()関数は役立つかもしれませんが、常にではありません。この機能が使えなくなる場合があります。同様に、ajaxで投稿をロードすると、テンプレートパーツが取得され、関数を使用できます。そのため、WordPressのドキュメントではこのdie()機能を利用することが提案されています。

したがって、最終的に、php関数は次のようになります。

/**
* Get Facebook Likes
*/

public function get_facebook_likes() {
   echo 99;
   die();
}
于 2015-06-21T04:34:04.637 に答える
0

Firebugを使用して、送受信された実際のネットデータを表示します。エラーの原因がjavascript側かPHP側かを判断します。ネットリクエストをコピーして別のブラウザウィンドウに貼り付け、生の結果を確認します。PHPの場合は、それを追求してください。何かをしているJavaScriptの場合は、お知らせください。

于 2012-11-23T22:32:16.427 に答える