如何将MongoDB find()的所有结果输出到jQuery html()中?

时间:2013-09-07 12:13:52

标签: php jquery mongodb getjson

我想通过jQuery的find()方法将MongoDB div方法生成的所有结果输出到getJSON()

文档

{
   "_id": ObjectId("34576347347"),
   "content": "here is some content",
   "field2": {
     "subfield1": {
       "0": "sf1v0",
       "1": "sf1v1",
       "2": "sf1v2" 
    },
     "subfield2": "value 2" 
  },
   "field2": "value 3" 
}

PHP

<?php   

$dbhost = 'username:password@127.x.xx.x:27017/';  
$dbname = 'my_database';  
$m = new MongoClient("mongodb://$dbhost");  
$db = $m->$dbname;  

// specify the collection  
$collection = $db->myCollection;  

// define the query  
$query = $collection->find(array("field2.subfield2" => "value 2"));  

foreach($query as $result) {  
echo $result['field2'] . " - " . $result['content'] . "<br>";  
}  

?>  

直接访问PHP文件时会显示:

value 3 - here is some content // values from the first document
value 3 - here is some content // values from the second document

以下是我尝试通过jQuery的div方法在getJSON()中获取相同的输出。

的jQuery

$.getJSON("http://path/to/file.php", {cid: href, format: 'json'}, function(results){  
$("#my_div").html(results);
});

我尝试过的其他事情

使用iterator_to_array()功能:

PHP

// define the query  
$query = $collection->find(array("field2.subfield2" => "value 2"));  
echo json_encode(iterator_to_array($query, false));

结果

div的内容变为空div,即:

<div id="my_div"></div>  

以下结果:

PHP

// define the query  
$query = $collection->find(array("field2.subfield2" => "value 2"));  
echo json_encode(iterator_to_array($query, false));

的jQuery

$("#my_div").html(results[0].field2 + " - " + results[0].content + "<br>" + results[1].field2 + " - " + results[1].content);

但它不是可扩展/灵活的解决方案。

我想我需要使用jQuery的.each().append()方法,以便:

  • 表示数组中的每个文档
  • 将其内容附加到div

但是我还想不出怎么做,这就是我尝试过的:

$.getJSON("http://path/to/file.php", {cid: href, format: 'json'}, function(results){ 
$("#my_div").html("");
$.each(results, function(){ 
$("#my_div").append(results.field2 + " - " + results.content + "<br>");
});
});

正在输出:

undefined - undefined
undefined - undefined

2 个答案:

答案 0 :(得分:3)

<强>解决方案

<强> PHP

<?php   

$dbhost = 'username:password@127.x.xx.x:27017/';  
$dbname = 'my_database';  
$m = new MongoClient("mongodb://$dbhost");  
$db = $m->$dbname;  

// specify the collection  
$collection = $db->myCollection;  

// define the query  
$query = $collection->find(array("field2.subfield2" => "value 2"));  

//  add content type (otherwise firebug doesn't show a JSON tab and type is text/html)
header("Content-type: application/json");

// convert the cursor to an array
echo json_encode(iterator_to_array($query, false));

?> 

<强>的jQuery

$.getJSON("http://path/to/file.php", {cid: href, format: 'json'}, function(results){ 
$("#my_div").html("");
$.each(results, function(key,value){ 
$("#my_div").append(results.field2 + " - " + results.content + "<br>");
});
});

my_div的内容显示为:

value 3 - here is some content
value 3 - here is some content

答案 1 :(得分:1)

首先,您必须从执行查询后创建的光标中提取所有生成的文档。我在下面的示例中所做的就是准备一个数组来保存光标所指向的所有文档。

拥有这个docuemnts数组后,您真正需要做的就是将结果编码为JSON格式。为此,您可以使用json_encode() function

  

json_encode() - 返回值

的JSON表示形式

以下是一个示例用法:

$cursor = $collection->find( YOUR_QUERY );  
$response = [];
foreach ($cursor as $document) {
  $response[] = $document;
}

echo json_encode( $response );