2012-04-22 39 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,它似乎工作正常。