构造PHP数组正确传递给JS

时间:2013-01-29 10:32:10

标签: php javascript jquery json mongodb

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

$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 {}

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

1 个答案:

答案 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将包含对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作为每个索引库。