2012-04-22 41 views
2

我基本上有一個ajax函數從數據庫中獲取最新的帖子,我想知道的是如果沒有數據被發現我應該返回看到因爲返回null似乎是一個問題螢火蟲?如何返回一個空的json_encode對象

PHP代碼

function getLatestChat(){ 
    global $session, $form; 

    $data = $session->getLatestChat(mysql_real_escape_string($_REQUEST['withUser']), 
     mysql_real_escape_string($_REQUEST['ignoreMessages'])); 

    if($data){//successful 
     echo json_encode($data); 
    }   

    return; 
} 

jQuery代碼

function getLatestChat(){ 
    var ignoreMessagesArr = $(".chatID").map(function(){ return this.value;}).get().join(","); 

    $.ajax({ 
     traditional: true, 
     dataType: "json", 
     type: "GET", url: "include/process.php", 
     data:{ 
     getLatestChat: "true", 
     withUser: currentCCID, 
    ignoreMessages: ignoreMessagesArr 
     }, 
     success: function(data){ 
     $.each(data, function(i, elem){ 
     $('.chat-latestContainer').append(elem.value); 
    });    
     } 
    } 
}); 

此刻的方法要麼返回$數據對象或

+0

你可以編輯你的問題,包括Javascript代碼導致錯誤(Ajax響應的處理程序)? – Paulpro 2012-04-22 19:23:24

回答

4

可以返回一個空的對象,以表示對該對象的數據:

return '{}'; 

或者,如果你的Javascript代碼需要一個數組,返回一個空數組:

return '[]'; 
+0

那不解決問題,我仍然得到對象爲空 – 2012-04-22 19:20:20

+0

@ mk_89然後你需要修復你的Javascript,而不是你的服務器端代碼。 – Paulpro 2012-04-22 19:21:21

+0

你在我的jQuery代碼中的權利我應該檢查對象是否爲空 – 2012-04-22 19:27:06

1

運行一個簡單的

if(isset($retunValue)){ 
//code 
} 

檢查它來檢查它是否設置。

你也可以嘗試

if(!empty($returnValue)){ 
    //code 
} 

你如果代碼,你可以將其設置爲任何適合您的進一步使用需求。如果不需要的話,你可以忽略它,只是把你的函數傳回來,不會拋出錯誤。

+0

'isset()'與'!empty()'不一樣。 – Tadeck 2012-04-22 19:21:37

+0

即時通訊返回一個json_encode數組,這意味着它的意思是jQuery所以這段代碼不適用 – 2012-04-22 19:21:59

+0

@ mk_89如果你使用jQuery .ajax()函數,你可以設置你的成功函數代碼來執行這個檢查。或者你在成功功能之前得到錯誤? – JeremyS 2012-04-22 19:26:32

0

重寫(舉例來說):

function getLatestChat($session, $form){ 
    $ret = {}; 

    $data = $session->getLatestChat(mysql_real_escape_string($_REQUEST['withUser']), 
     mysql_real_escape_string($_REQUEST['ignoreMessages'])); 

    if($data){//successful 
     $ret = json_encode($data); 
    }   

    return $ret; 
} 

echo getLatestChat($session, $form); 
0

在這種情況下,我傾向於明確規定Th反應類型,但也許有更多的慣例......

<?php 

header('Content-Type: application/json'); 

// ... do stuff here: fetch data, json_encode etc. 

// No data, no response 
if (strlen($json) === 0) { // assuming we json encoded the data above 
    header('HTTP/1.1 204 No Content');   
    exit(); 
} 

// everything is ok 
header('HTTP/1.1 200 OK'); 
echo $json; 

我剛剛檢查了FF11和最新的Firebug,它似乎工作正常。