构造PHP数组以正确传递给JS

构造PHP数组以正确传递给JS,php,javascript,jquery,json,mongodb,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

当我们这样做时,它就起作用了:

$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).")";
$.getJSON("mySite.com/pullData/getMail.php?callback=?",{
request: requestVar},
function(recievedData) {
    alert(recievedData);
})
但当我们这样做时:

$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).")";
$.getJSON("mySite.com/pullData/getMail.php?callback=?",{
request: requestVar},
function(recievedData) {
    alert(recievedData);
})
在Javascript中执行以下操作:

$.getJSON("mySite.com/pullData/getMail.php?callback=?",{
request: requestVar},
function(recievedData) {
    alert(recievedData);
})
我们得到一个关于
true、[object object]
当使用控制台日志时,我们得到
对象{}


如何正确发送该表数据

我认为您最大的问题是
MongoCursor

$messageArray = $collection->find(array('IDto' => '4'));
$JSONData = array('true', $messageArray); 
echo $_GET['callback']."(".json_encode($JSONData).")";
您正在尝试对
MongoCursor
的对象进行编码,因此字符串表示为
[object object]

尝试:

相反。MongoDB中的所有
find
函数都返回一个
MongoCursor
,第一个代码之所以有效,是因为您迭代光标构建对象:

foreach($messageArray as $messageData){
    $messageFrom = $messageData['IDfrom'];
    $messageTo = $messageData['IDto'];
    $messageTitle = $messageData['messageTitle'];
    $messageIfRead = $messageData['ifRead'];    
}
另外请注意,文档的默认
json\u 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。

好了,现在我将所有数据作为对象获取,如何从数组键(如receivedData[1]['IDFrom')的括号中获取它们?现在看起来是这样的:@Silas您可以做的是(因为我注意到您使用JQuery):
$.each(receiveddata,function(I,item){console.log(item._id.$id);})你可能想手动提取索引,除非那些对象id索引与你的应用程序配合正常。这太棒了!开始起作用了。非常感谢你抽出时间。有没有一种方法可以在javascript/jquery中“foreach”这样我就可以处理多行了?receiveddata[1]['userIdTo']当我这样做时,我会得到一行的正确响应。如何获得其他行?@Silas Ha更正了我为循环提供的代码:
$.each(receiveddata[1],function(I,item){console.log(item._id.$id);})应该访问var的索引1,因为数据实际上位于位置1