【发布时间】:2017-12-18 16:46:46
【问题描述】:
我有一个在 JavaScript 中更新的数组。
这是我开始数组的方式...
columnArray = ["userID", "Date", "trialType", "cue", "target", "response", "accuracy", "lenAcc", "strictAcc", "fkpl", "totalTime"];
var dataArray = [];
dataArray.push(columnArray);
然后我会根据发生的情况和我所做的一些计算来更新数据...
dataArray.push(userID, new Date(), trialType, cue, target, response, accuracy, lenAcc, strictAcc, fkpl, totalTime);
当我使用此代码显示数组时...
document.getElementById("trial").innerHTML = dataArray;
...看起来不错(格式化换行)
userID,Date,trialType,cue,target,response,accuracy,
lenAcc,strictAcc,fkpl,totalTime,
Ad31,Mon Dec 18 2017 11:35:55 GMT-0500 (Eastern Standard
Time),copy,hello,world,xzzvxzxvxzxcv,0,0,0,938,5001
但是,当我使用此功能保存数据时...
function saveData(){
$.ajax({
type: "POST",
url: "saveData.php",
dataType: "application/json",
ContentType: "application/json; charset=utf-8",
data: {"data": JSON.stringify(dataArray)},
})
}
...我只得到标题信息(格式化换行符)
[["userID","Date","trialType","cue","target","response","accuracy",
"lenAcc","strictAcc","fkpl","totalTime"]]
我在某处读到,也许我的数组需要是一个对象,因此我应该使用...
var dataArray = {};
...而不是...
var dataArray = [];
但是如果我这样做了,我还能把dataArray当作一个普通的数组(例如,将内容推到最后,存储大量数据等)吗?
还是有其他问题?
理想情况下,我希望每个“试验”都有一行,以便逐行格式化数组。但首先我只想正确写入数据。
谢谢!
已解决! 该代码现在有效。在使用 push() 将数据附加到数组之前,我只是调用了我的 Ajax 保存函数。一旦我将我的保存函数移动到在数据被推入数组后立即调用,它会保存包含所有相关信息的文件!
【问题讨论】:
-
你的代码流一定有问题。请参阅jsfiddle.net/og481q9j - 它输出整个数组。但是,我不知道您的服务器期望得到什么格式,但是包含键值对的 JS 对象似乎更合乎逻辑,并且还利用了该语言的实际功能。你的方式有点随意。例如
var dataObj = { "userID": "Ad31", "Date": new Date(), "trialType": "copy"...等。将是常规方法。如果您需要在初始声明之后添加或修改属性,那么很简单 -dataObj.cue = "hello"; -
所以我解决了我的问题,我将在上面讨论。你是对的——这是代码的流程。通过将我的 saveData 函数向上移动,使其在我将数据推送到数组后立即发生,它可以工作。不知何故,它试图在我将新值推入数组之前保存数据(不知何故——将对此进行更多调查)。谢谢!!!!
-
@KalifVaughn 页面底部有一个“发布答案”按钮。如果您有答案,您应该将其作为答案发布,而不是作为问题的一部分。也就是说,这不太可能对未来的访问者有帮助,因此最好将其删除。
标签: javascript arrays json ajax