如何返回null json_encode对象

时间:2012-04-22 19:12:18

标签: php jquery ajax json

我基本上有一个ajax函数可以从数据库中获取最新的帖子,我想知道的是,如果没有找到数据我应该返回什么,因为返回null似乎是firebug的一个问题?

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);
     });             
      }
   }
});   

此方法返回 $ data 对象或 null

4 个答案:

答案 0 :(得分:4)

您可以返回一个空对象来表示对象中没有数据:

return '{}';

或者,如果您的Javascript代码需要一个数组,则返回一个空数组:

return '[]';

答案 1 :(得分:1)

运行一个简单的

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

检查它以检查它是否设置。

你也可以试试

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

在您的if代码中,您可以将其设置为符合您需要的任何内容以供进一步使用。如果它不需要你可以忽略它,只是将你的函数传递回来,不会引发错误。

答案 2 :(得分: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);

答案 3 :(得分:0)

在这种情况下,我倾向于明确说明响应类型,但也许有更多已建立的做法......

<?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上检查了这个,它似乎工作正常。