尊敬的人......
这是我的node.js代码...... https://gist.github.com/SkyKOG/99d47dbe5a2cec97426b
我试图解析考试成绩的数据......例子...... http://www.vtualerts.com/results/get_res.php?usn=1MV09IS002&sem=7
我得到的结果......我正在寻找以前似乎也是...... 所有的工作,但遍历回来是随机发生的...循环错误...
json.results = [];
var output = '';
var k = response.query.results.body.div.div[0].table[1].tr.length;
for (var j = 1; j < k; j++) {
for (var i = 0; i <= 5; i++) {
var result_obj = {};
result_obj.subjects = [];
for (key in response.query.results.body.div.div[0].table[1].tr[j].td[i]) {
if (typeof response.query.results.body.div.div[0].table[1].tr[j].td[i].em === "undefined") {
continue;
}
var subject_obj = {};
output += "Subject : " + response.query.results.body.div.div[0].table[1].tr[j].td[i].em + " " + "\n";
var subtext = response.query.results.body.div.div[0].table[1].tr[j].td[i].em + " " + "\n";
subject_obj.subjectname = subtext.replace(/[(].*[)]/, "").trim();
result_obj.subjects.push(subject_obj);
console.log(subject_obj);
break;
}
console.log(result_obj.subjects);
我认为有一些像异步概念需要正确实现才能以正确的顺序重新排序sems ......
以这种格式获取JSON ...... https://gist.github.com/SkyKOG/3845d6a94cea3b744296 我不认为我在正确的范围内推动创建的对象......
请帮助这方面......谢谢......
答案 0 :(得分:1)
(我将回答订购部分。建议将JSON问题作为一个单独的问题来配合Q&amp; A格式。)
当您在代码中发出HTTP请求时(请参阅下面的行),您会在响应执行的顺序中带来不同的延迟
new YQL.exec(queryname, function (response) {
您需要自己跟踪请求的顺序,或使用库为您执行此操作。
为了解决这个问题,您需要能够跟踪请求的原始顺序。由于闭包的工作方式,你不能只增加一个简单的计数器,因为随着循环的进行,它将在全局范围内被更改。解决这个问题的惯用方法是将计数器传递给立即执行的函数(作为值类型)
e.g。
var responseData = [];
for ( var i = 0; i < 100; i++ ){
(function(){
...
// http call goes in here somewhere
responseData[i] = data_from_this_response
...
})(i)
}
查看Caolan优秀图书馆的async.parallel()
电话。你传递一个函数数组,它将返回你的回调函数数组。
https://github.com/caolan/async/#parallel
您需要创建一个循环,使用函数的curried版本填充数组,其中包含适当的变量。