当我们这样做时,这是有效的:
$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 {}
我们如何正确发送表格数据?
答案 0 :(得分: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).")";
相反。 MongoDB中的所有find
函数都返回MongoCursor
,您的第一个代码工作的原因是因为您迭代构建对象的光标:
foreach($messageArray as $messageData){
$messageFrom = $messageData['IDfrom'];
$messageTo = $messageData['IDto'];
$messageTitle = $messageData['messageTitle'];
$messageIfRead = $messageData['ifRead'];
}
另请注意,文档的默认json_encode
将包含对MongoId
和MongoDate
的对象,这些对象不能很好地编码为可重用的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作为每个索引库。