2012-11-23 42 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(); 
}