[英]Upload and Parse multiple JSON files in javascript and vuejs
[英]How to use Get to parse multiple JSON files?
我在一次解析多個JSON文件時遇到了一些麻煩。
基本上,我有一個帶有復選框的Web表單,用於控制要在Google Map上繪制哪些多邊形。
根據用戶選擇的內容,確定要獲取和解析的JSON文件(和地理坐標)。 下面的腳本除最后一步外均有效-無論選擇多少,它始終僅返回最后一個JSON文件。
這是我對Stackoverflow的第一篇文章,並且是JS的新手,因此,對解決此問題的任何建議或不同方式都將不勝感激!
var xmlhttp = new XMLHttpRequest(); //
xmlhttp.onreadystatechange = function() { //parse json file
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = JSON.parse(xmlhttp.responseText);
console.log(myArr);
}
}
function goCheck() {
var input = document.getElementsByTagName('input');
var checkboxCount = 0;
var selections = [];
var urlArray = [];
for (var i=0, length = input.length; i<length; i++) {
if (input[i].checked === true) {
j = input[i].value;
selections.push(j); // store values for checkbox selections in array
checkboxCount++; // keep track how many were checked
var url = "https://mywebsite.ca/" + j + ".txt";
urlArray.push(url); // store urls in array
}
}
console.log(checkboxCount); // number of boxes checked
console.log(selections); // array with the selection values
console.log(urlArray); // an array with the json urls
// 2nd Loop - iterate over URL array and call function to get json object
for (var i=0, length = urlArray.length; i<length; i++) {
console.log(urlArray[i]);// check that loop is working
xmlhttp.open("GET", urlArray[i], true);
xmlhttp.send();
}}
您正在重新分配xmlhttp
每次在做什么。 每次創建一個新的變量,並為其分配狀態更改處理程序,它應該可以工作。 例如
for (var i=0, length = urlArray.length; i<length; i++) {
console.log(urlArray[i]);// check that loop is working
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() { //parse json file
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = JSON.parse(xmlhttp.responseText);
console.log(myArr);
}
};
xmlhttp.open("GET", urlArray[i], true);
xmlhttp.send();
}}
當您在同一XMLHttpRequest
上調用open
時,您將放棄最后一個請求,但是如果您每次創建一個新請求,它們將各自處理自己的請求。
另外,如果您可以控制服務器端,則服務器方法需要一個文件數組以在單個AJAX調用中獲取並返回json數組,這似乎是一種長期的方法。
您需要為每個文件創建一個新的XMLHttpRequest。 將您的最后一個循環替換為:
var xmlhttp; for (var i=0, length = urlArray.length; i<length; i++) { xmlhttp = new XMLHttpRequest(); // xmlhttp.onreadystatechange = function() { //parse json file if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var myArr = JSON.parse(xmlhttp.responseText); console.log(myArr); } } console.log(urlArray[i]);// check that loop is working xmlhttp.open("GET", urlArray[i], true); xmlhttp.send(); }}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.