将多个请求发送到节点服务器的正确方法是什么?

时间:2015-07-10 06:38:17

标签: javascript php ajax node.js mongodb

我有一个应用程序,我想根据多个条件从节点服务器获取数据(调用循环内的节点服务器)。

我有以下代码逻辑:

home-node.php ,其中有一个具有 search-node.php 操作的表单。

search-node.php 中,我收集所有参数并使用参数构建 $ ajaxurl getnodedata.php 并调用此文件通过ajax。

搜索-node.php

$.ajax({
                url: "<?php echo $ajaxurl;?>",
                type: "POST",
                success : function(html){
                    $("#response").html(html);

    });

getnodedata.php 中,我编写了代码以从节点服务器获取数据。

getnodedata.php

getDataFromNode($conditions,"http://example.com:8080/fetchdata");


/* Function to fecth data using node*/
function getDataFromNode($conditions,$url)
{
    $data="<table class='display' id='table'>";
    $data.="<thead>";
    $data.="<tr>";
    $data.="<th>";
    $data.="</th>";
    $data.="<th style='text-align:center;'>";
    $data.="Name";
    $data.="</th>";
    $data.="<th style='text-align:center;'>";
    $data.="Data";
    $data.="</th>";
    $data.="</tr>";
    $data.="</thead>";
    $data.="<tbody>";
    for($i=0;$i<count($conditions);$i++)
    {
        $returndata = curl_post(json_encode($conditions[$i]),$url);
        foreach ($returndata as $value)
        {
            $data.="<tr>";
            $data.="<td>";
            $data.="</td>";
            $data.="<td>";
            $data.=$value['name'];
            $data.="</td>";
            $data.="<td>";
            $data.=$value['data'];
            $data.="</td>";
            $data.="</tr>";
        }

    }
    $tabledata.="</tbody>"; 
    $data.="</table>";
    echo $data;
}

/* function to send curl request to node */
function curl_post($data_string,$url)
{
    $ch = curl_init($url);                                                                      
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
            'Content-Type: application/json',                                                                                
            'Content-Length: ' . strlen($data_string))                                                                       
        );                                                                                                                   

    $result = curl_exec($ch);
    $data = json_decode($result,TRUE);
    curl_close($ch);
    return $data;
}

在服务器上我定义了路线:

app.post('/fecthdata', db.findData);

函数findData定义如下:

exports.findData = function(req, res) {
    var condition = req.body;
    console.log('condition: ' + JSON.stringify(condition));
    db.collection('collection1', function(err, collection) {
        collection.find(condition).toArray(function(err, item) {
            res.send(item);
        });
    });
};

我有以下问题:

1)我调用节点服务器的方法是否正确?

有问题的代码是:

for($i=0;$i<count($conditions);$i++)
{
    $returndata = curl_post(json_encode($conditions[$i]),$url);
}

2)有没有办法显示响应,因为它到达客户端浏览器,在响应div中显示第一个响应并继续追加到最终响应?

现在我立即返回所有数据。

0 个答案:

没有答案