0

当我们这样做时,这有效:

$db = $connection->messages;
$collection = $db->messagesCollection;
$messageArray = $collection->find(array('IDto' => '4'));
foreach($messageArray as $messageData){
    $messageFrom = $messageData['IDfrom'];
    $messageTo = $messageData['IDto'];
    $messageTitle = $messageData['messageTitle'];
    $messageIfRead = $messageData['ifRead'];    
}

$JSONData = array('true', $messageFrom, $messageTo, $messageTitle, $messageIfRead); 
echo $_GET['callback']."(".json_encode($JSONData).")";

但是当我们这样做时:

$db = $connection->messages;
$collection = $db->messagesCollection;
$messageArray = $collection->find(array('IDto' => '4'));
$JSONData = array('true', $messageArray); 
echo $_GET['callback']."(".json_encode($JSONData).")";

并在 Javascript 中这样做:

$.getJSON("mySite.com/pullData/getMail.php?callback=?",{
request: requestVar},
function(recievedData) {
    alert(recievedData);
})

我们收到警告true, [object Object] 当使用控制台日志时,我们得到Object {}

我们如何正确发送该表数据?

4

1 回答 1

1

我相信你最大的问题是MongoCursor

$messageArray = $collection->find(array('IDto' => '4'));
$JSONData = array('true', $messageArray); 
echo $_GET['callback']."(".json_encode($JSONData).")";

您正在尝试对MongoCursor那里的对象进行编码,因此字符串表示形式为[object Object].

尝试:

$messageArray = $collection->find(array('IDto' => '4'));
$JSONData = array('true', iterator_to_array($messageArray)); 
echo $_GET['callback']."(".json_encode($JSONData).")";

反而。findMongoDB 中的所有函数都返回 a MongoCursor,您的第一个代码工作的原因是因为您迭代游标来构建您的对象:

foreach($messageArray as $messageData){
    $messageFrom = $messageData['IDfrom'];
    $messageTo = $messageData['IDto'];
    $messageTitle = $messageData['messageTitle'];
    $messageIfRead = $messageData['ifRead'];    
}

另请注意,json_encode文档的默认值将包含对象,例如MongoIdMongoDate不会很好地编码为可重用的 JSON 语法。因此,您需要自己处理这些类型。

编辑

也许更好的方法是手动重做索引:

$messageArray = $collection->find(array('IDto' => '4'));
$d = array();
foreach($messageArray as $row){
    $d = $row;
}

$JSONData = array('true', $d); 
echo $_GET['callback']."(".json_encode($JSONData).")";

这样,您将拥有一个0基于递增的索引,而不是 ObjectId 作为每个索引的基础。

于 2013-01-29T10:39:01.607 回答