Javascript JSON数据日志并发送到服务器
我有一个javascript函数,它在每一秒生成JSON数据,然后将其放到云服务器上。现在我不想实时发布,而是想把这些数据记录在一个缓冲区中,并说在n个数据日志之后,我将把它们放到云中。例如,我想在10秒内记录50个数据点,然后在服务器上加上时间戳 现在JSON数据通过var fromDatan传递。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
{"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