我想通过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()
方法,以便:
但是我还想不出怎么做,这就是我尝试过的:
$.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
答案 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表示形式
json_encode()
- 返回值
以下是一个示例用法:
$cursor = $collection->find( YOUR_QUERY );
$response = [];
foreach ($cursor as $document) {
$response[] = $document;
}
echo json_encode( $response );