2012-11-23 41 views
4

我在WordPress中有一个AJAX函数,它调用一个PHP函数来返回数据库中的瞬态记录的值。为什么AJAX json脚本返回额外的0(零)

当我使用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); 

但是也有参与,这是主要的jQuery的功能与WordPress通信,并返回PHP函数的值更辅助功能。

的问题是,如果该值例如返回为“99”,它将为“990

这里是jQuery是调用PHP函数返回:

/** 
* Get Facebook Likes 
*/ 

public function get_facebook_likes(){ 

    echo 99; 
} 

如果我将以上内容更改为return 99;,我会收到纯文本0

+0

你添加一个数字时,你应该增加一个数量为数字的字符串,无论是在PHP端或使用Javascript结束? – JayC

+0

只是为了调试我有PHP函数“return 99;”。它仍然返回990 – Jason

回答

6

您的函数应该使用wp_send_json将PHP编码为JSON并将其发送回AJAX请求处理程序。这也将停止执行任何下面的PHP,所以不需要使用退出或死亡。

因此,对于你具体的例子,你可以使用:

/** 
* Get Facebook Likes 
*/ 

public function get_facebook_likes(){ 
    wp_send_json(99); 
} 
+0

我知道这个问题已经过时了,但它在谷歌似乎很高,所以我在这里发布了正确的解决方案 - 以防万一。 – Lewis

+0

谢谢@刘易斯伟大的回答 – Jason

+0

是刘易斯我正在绞尽脑汁,你修好了!愚蠢的0把我抛弃了。直到现在我还不知道wp_send_json ... –

0

使用Firebug并查看发送和接收的实际净数据。确定错误是来自JavaScript方还是PHP方。复制网络请求并将其粘贴到单独的浏览器窗口中以查看原始结果。如果是PHP,就追求这一点。如果这是JavaScript做的事,让我们知道。

+0

在请求“POST admin-ajax.php”的Firebug网络数据中,我收到结果为“990”。这是否意味着它是PHP方面还是Javascript? – Jason

+0

这意味着PHP是问题 – Mathew

+0

刚刚更新了主要问题以显示jQuery正在调用的PHP函数。 – Jason

1

这是老问题,但我会回答这个问题。功能可能有帮助,但并不总是如此。可能有些时候你不能使用这个功能。比如,当你通过ajax加载帖子时,你会得到一些模板部分,你可以使用该函数。这就是为什么WordPress文档建议使用die()函数。

所以在最后,你的PHP函数应该是这样的:

/** 
* Get Facebook Likes 
*/ 

public function get_facebook_likes() { 
    echo 99; 
    die(); 
}