Как я могу запустить какой-нибудь javascript перед функцией готовности документа?
Сначала я закончил следующий фрагмент ...
var applicantlist = [];
$.getJSON("apps.json", function(appsdata) {
for (var i = 0; i<appsdata.applications.length; i++){
var tempapp = [appsdata.applications[i].name, appsdata.applications[i].server];
applicantlist.push(tempapp);
}
});
Я проверил это, и данные без проблем помещаются в массив. Проблема в том, что мне нужен этот массив для выполнения некоторых вызовов ajax, которые находятся в моей функции готовности страницы следующим образом ...
$(document).ready(function(){
window.jsonpCallbacks = {};
alert(applicantlist.length);
for (var i = 0; i < applicantlist.length; i++){
(function(index){
window.jsonpCallbacks["myCallback" + index] = function(data){
myCallback(data,index);
};
})(i);
//Jquery/Ajax call to the WoW API for the data.
$.ajax({
"url":"http://us.battle.net/api/wow/character/" + applicantlist[i][1] + "/" + applicantlist[i][0] + "?jsonp=jsonpCallbacks.myCallback" + i,
"type":"GET",
"data": { fields: "items, talents, progression, professions, audit, guild, stats"},
"dataType":"jsonp",
"contentType":"application/json",
"jsonpCallback":"jsonpCallbacks.myCallback"+i,
"success":function(data1){
}
})
}
Все это срабатывает перед первым снайпером, куда бы я ни поставил. Итак, массив пуст (в предупреждающем сообщении отображается только «0»).
Как видно по URL-адресу моего вызова ajax, мне нужно заранее заполнить этот массив. Я попытался поместить первый фрагмент в отдельный файл .js и вызвать его перед всеми другими файлами javascript на реальной HTML-странице ...
Что мне не хватает?
1 ответ
Переместите код, отправляющий первый запрос, в document.ready. Обычно вы не хотите, чтобы что-либо происходило до того, как документ будет готов. Затем переместите код, который отправляет следующий запрос (ы) в обратный вызов первого запроса после того, как вы заполните массив, и сделайте все, что вам нужно, сначала
$(document).ready(function () {
$.getJSON("apps.json", function(appsdata) {
...
// add items to your array
sendNextRequest();
}
});
function sendNextRequest() {
//Jquery/Ajax call to the WoW API for the data.
...
}
Это гарантирует, что вызовы API WoW не запускаются до тех пор, пока не завершится первый вызов $ .getJSON и вы не заполните свой массив.
К вашему сведению, это обычная проблема в javascript. Вам нужно, чтобы одна операция запускалась только после завершения другой. Когда вы используете ajax, у вас есть обратные вызовы, как в моем примере выше, которые помогут вам в этом. Вне запросов ajax вы можете использовать jQuery Promises, чтобы отложить выполнение задач до тех пор, пока не завершится что-то еще.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.
$.getJSON
, то есть AJAX.