Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON数据日志并发送到服务器_Javascript_Json - Fatal编程技术网

Javascript JSON数据日志并发送到服务器

Javascript JSON数据日志并发送到服务器,javascript,json,Javascript,Json,我有一个javascript函数,它在每一秒生成JSON数据,然后将其放到云服务器上。现在我不想实时发布,而是想把这些数据记录在一个缓冲区中,并说在n个数据日志之后,我将把它们放到云中。例如,我想在10秒内记录50个数据点,然后在服务器上加上时间戳 现在JSON数据通过var fromDatan传递。JSON数据格式为 {"value":"-2.1282838391939194"} 现在代码是: var acc; var watchID = null; function startW

我有一个javascript函数,它在每一秒生成JSON数据,然后将其放到云服务器上。现在我不想实时发布,而是想把这些数据记录在一个缓冲区中,并说在n个数据日志之后,我将把它们放到云中。例如,我想在10秒内记录50个数据点,然后在服务器上加上时间戳

现在JSON数据通过var fromDatan传递。JSON数据格式为

{"value":"-2.1282838391939194"}
现在代码是:

var acc;
    var watchID = null;

function startWatch() {

            //set frequency of accelerometer update.1000 = 1 second

            var options = { frequency: 1000 };
            watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);

        }


    function stopWatch() {
            if (watchID) {
            navigator.accelerometer.clearWatch(watchID);
            watchID = null;
            }
        }


    //DISPLAY ACCELERATION DATA

    function onSuccess(acceleration) {
            acc = acceleration;
            var element = document.getElementById("accelerometer");
            element.innerHTML = 'Acceleration X: ' + acceleration.x         + '<br />' +
                              'Acceleration Y: ' + acceleration.y         + '<br />' +
                              'Acceleration Z: ' + acceleration.z         + '<br />' +
                              'Timestamp: '      + acceleration.timestamp + '<br />';

                datalock();


        }



    function postdata () {
        var accx = acc.x;
        alert(accx);




            var fromDatan = JSON.stringify(fromData);
                alert(fromDatan);

                //POST JSON  DATA

                $.ajax({
                url: "http://abcd.com",
                headers: {
                    "X-API-KEY": "2b9asdedqedqxdqd7956e6f7a",
                    "Content-Type": "application/json"
                },
                type: "PUT",
                data: fromDatan,
                dataType: "JSON",
                success: function(fromData, status, jqXHR) {
                    alert(JSON.stringify(fromData));
                },

                error: function(jqXHR, status) {
                    alert(JSON.stringify(jqXHR));
                }
                });
                return false;

        }

        function datalock(){
            alert("Entering");
            fromData.push({
                value: accx.toString(),
            });
            if (fromData.length >= 10) {
                postdata ();
            };

        var fromData;

        }
var-acc;
var-watchID=null;
函数startWatch(){
//设置加速计更新频率。1000=1秒
var选项={频率:1000};
watchID=navigator.Accelerator.watchAcceleration(onSuccess、onError、options);
}
功能秒表(){
if(watchID){
navigator.Accelerator.clearWatch(watchID);
watchID=null;
}
}
//显示加速度数据
成功时的功能(加速){
acc=加速度;
var元素=document.getElementById(“加速计”);
element.innerHTML='Acceleration X:'+Acceleration.X+'
'+ “加速度Y:”+加速度.Y+”
”+ “加速度Z:”+加速度.Z+”
”+ '时间戳:'+acceleration.Timestamp+'
'; 数据锁(); } 函数postdata(){ var accx=acc.x; 警报(accx); var fromDatan=JSON.stringify(fromData); 警报(fromDatan); //发布JSON数据 $.ajax({ url:“http://abcd.com", 标题:{ “X-API-KEY”:“2B9ADEDQEDQXDQD7956E6F7A”, “内容类型”:“应用程序/json” }, 键入:“放置”, 数据:fromDatan, 数据类型:“JSON”, 成功:函数(fromData、status、jqXHR){ 警报(JSON.stringify(fromData)); }, 错误:函数(jqXHR,状态){ 警报(JSON.stringify(jqXHR)); } }); 返回false; } 函数datalock(){ 警报(“进入”); fromData.push({ 值:accx.toString(), }); 如果(fromData.length>=10){ postdata(); }; var-fromData; }

它不起作用,尽管所有其他的事情都是正确的,但我不能正确地执行推送。有人能帮我吗?

编辑开始

试试这个:

var fromData = [];
var jsonCounter = 0;

function postdata () {
    var accx = acc.x;
    alert(accx);

    var fromDatan = JSON.stringify(fromData);
    alert(fromDatan);

    $.ajax({
    url: "http://abcd.com",
    headers: {
        "X-API-KEY": "2b9asdedqedqxdqd7956e6f7a",
        "Content-Type": "application/json"
    },
    type: "PUT",
    data: fromDatan,
    dataType: "JSON",
    success: function(fromData, status, jqXHR) {
        alert(JSON.stringify(fromData));
    },

    error: function(jqXHR, status) {
        alert(JSON.stringify(jqXHR));
    }
    });
    return false;
}

function datalock(){
    alert("Entering");
    fromData.push({
        value: accx.toString(),
    });

    jsonCounter++;

    // post only after 10 entries
    if (jsonCounter >= 10) {
    postdata ();
    jsonCounter = 0; // reset
    };
}
编辑结束

由于
JSON
对象没有
length
属性,因此可以使用变量来实现

例如:

var formdata;
var jsonCounter = 0;

function datalock(){
    alert("Entering");
    fromData.push({
        value: accx.toString(),
    });

    jsonCounter++;

    // post only after 50 entries
    if (jsonCounter >= 50) {
        postdata ();
        jsonCounter = 0; // reset
    };

    //var fromData; // make it global as it is used in other function.
}

这是我根据@WebNomad的建议修改后的代码

    function postdata () {
            var accx = acc.x;
            alert(accx);




                var fromDatan = JSON.stringify(fromData);
                    alert(fromDatan);

                    //POST JSON SENSOR DATA

                    $.ajax({
                    url: "http://abcd.com",
                    headers: {
                        "X-API-KEY": "2b9e259asdasd6a7956e6f7a",
                        "Content-Type": "application/json"
                    },
                    type: "PUT",
                    data: fromDatan,
                    dataType: "JSON",
                    success: function(fromData, status, jqXHR) {
                        alert(JSON.stringify(fromData));
                    },

                    error: function(jqXHR, status) {
                        alert(JSON.stringify(jqXHR));
                    }
                    });
                    return false;

            //var fromData = {};
            }

            var fromData = [];
            var jsonCounter = 0;

//Edit start

            function datalock() {
            alert("Entering");
            //alert(jsonCounter); //It was showing me only count as 0
            fromData.push({
            value: accx.toString(),
            });
            alert(JSON.stringify(fromData));// no alert
            jsonCounter++;
            alert(jsonCounter); //The alert was not coming at all, when I tried this one
            // post only after 10 entries
            if (jsonCounter >= 10) {
            postdata ();
            jsonCounter = 0; // reset
            };
        }

//Edit End

这是在@web nomad

给出您的建议后所做的更改,我尝试使用您的代码,但不起作用,只是点击“进入警报。就这样。不起作用
postdata()
。我正在我的答案中编写修改后的代码,如果我这边有任何错误,请告诉我,以便更正。没有任何更改。同样,不发布数据。只是发出“输入”警报“就是这样。请检查我在本页答案中更改的代码,这是我根据您的建议更改的代码。控制台上有错误吗?”?你能在每次操作后记录变量
fromData
jsonCounter
吗?@web nomad添加了警报并检查了对代码的注释。你能在任何函数之前声明这两个变量吗?它已经在任何函数之外声明过了,仍然在我的代码开始时在所有函数之上再次声明。相同的problem@web-游牧链接是为了什么?计数器还没有增加。而且它不会转到postdata()。这个问题仍然存在。放数据没有问题,我用实时数据发送检查了一下。我的目标是在某种数组或缓冲区中记录多个数据,然后发送。多样本数据日志尚未实现。
    function postdata () {
            var accx = acc.x;
            alert(accx);




                var fromDatan = JSON.stringify(fromData);
                    alert(fromDatan);

                    //POST JSON SENSOR DATA

                    $.ajax({
                    url: "http://abcd.com",
                    headers: {
                        "X-API-KEY": "2b9e259asdasd6a7956e6f7a",
                        "Content-Type": "application/json"
                    },
                    type: "PUT",
                    data: fromDatan,
                    dataType: "JSON",
                    success: function(fromData, status, jqXHR) {
                        alert(JSON.stringify(fromData));
                    },

                    error: function(jqXHR, status) {
                        alert(JSON.stringify(jqXHR));
                    }
                    });
                    return false;

            //var fromData = {};
            }

            var fromData = [];
            var jsonCounter = 0;

//Edit start

            function datalock() {
            alert("Entering");
            //alert(jsonCounter); //It was showing me only count as 0
            fromData.push({
            value: accx.toString(),
            });
            alert(JSON.stringify(fromData));// no alert
            jsonCounter++;
            alert(jsonCounter); //The alert was not coming at all, when I tried this one
            // post only after 10 entries
            if (jsonCounter >= 10) {
            postdata ();
            jsonCounter = 0; // reset
            };
        }

//Edit End