2016-06-10 3 views
0

Есть ли способ получить данные из файла JSON и сохранить их в многомерном массиве в JavaScript. Файл JSON является файлом .php с заголовком, установленным в JSON.Сохранение данных JSON в массив

я пытался до сих пор:

var questionJSONS=""; 
$(document).ready(function(){ 
     var questionJ=""; 
     $.getJSON("http://localhost:8080/audioMillionaire/test2.php",function(result){ 
     $.each(result, function(i, item){ 
questionJ+= "['"+result[i].qid+"','"+result[i].description+"','"+result[i].a+"']"; 
    }); 
     setArray(questionJ);  
}); 

});

И многое другое, но никто из них, похоже, не работает.

+0

В вашем примере 'questionJ' является строкой. Пожалуйста, покажите нам свою функцию 'setArray()'. – BenM

ответ

1

Я думаю, что это то, что вы имели в виду:

$(document).ready(function() { 
    var questions = []; 

    $.getJSON("http://localhost:8080/audioMillionaire/test2.php", function(result) { 
     $.each(result, function(i, item) { 
      questions.push([result[i].qid, result[i].description, result[i].a]); 
     }); 
    }); 
}); 

Если нет, пожалуйста, комментарии.

Edit: BenM был быстрее

Edit:

Это работает хорошо, но я не могу использовать массив за пределами $ .getJSON

Это потому, что вы, вероятно, с помощью код выглядит следующим образом:

... 
     questions.push([result[i].qid, result[i].description, result[i].a]); 
    }); 
}); 

console.log(questions); 

Поскольку javascript является асинхронным языком, консольный вход в журнал происходит до того, как запрос был запрошен. Вы можете узнать больше об этом here.

$(document).ready(function() { 
    console.log("set test to old"); 
    var test = "old"; 

    setTimeout(function() { 
     console.log("set test to new"); 
     test = "new"; 
     console.log("inside timeout: " + test); 
    }, 3000); // runs in 3 seconds 


    console.log("outside timeout: " + test); 
}); 

Этот код должен служить хорошим примером. Функция setTimeout просто ждет 3 секунды и запускает функцию (как и запрос json).

Зная это, вы должны найти решение самостоятельно (например, вызывать переданную функцию после того, как массив был нажат). Если не комментировать.

Редактировать: ссылка на другую, лучшая страница.

+0

Это тоже работает, но я не могу использовать массив вне $ .getJSON –

+0

Прочтите мое обновленное сообщение. –

1

В вашем примере questionJ рассматривается как строка, и, не видя вашей функции setArray(), трудно сказать, что не так (я не знаю, если вы разбираете строку внутри этой функции, например).

Однако, при условии, что вы хотите для questionJ быть массивом массивов, следующее должно работать:

questionJSONS = [ ]; 

$.getJSON('http://localhost:8080/audioMillionaire/test2.php', function(result){ 
    $.each(result, function() { 
     questionJSONS.push([ this.qid, this.description, this.a ]); 
    }); 
}); 

Обратите внимание, что внутри функции $.each, вы можете ссылаться на this, который относится к текущему итерированного пункту , Используя этот метод (с push() и структурой данных массива) напрямую, тип данных также сохраняется из JSON.

Кроме того, поскольку вы не напрямую взаимодействуете с DOM внутри фрагмента, нет необходимости обертывать его внутри обработчика DOMReady.

+0

Спасибо за ваш ответ, это работает, но только с массивом questionJSONS, объявленным внутри $ .getJSON, и я не могу использовать его вне $ .getJSON, который мне действительно нужен. P.S это мой первый раз, используя stackoverflow, чтобы задать вопросы, чтобы у меня возникли проблемы с форматированием: –

+0

@BesnikCani Вы можете удалить определение 'var' перед' questionsJSONS', чтобы превратить его в полностью облачную переменную. Это должно решить вашу проблему. – BenM

+0

все еще не работает, когда я консолью его, он просто показывает две пустые квадратные скобки, когда я console.log его внутри $ .getJSON, он печатает фактический массив. –

Смежные вопросы