构造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