Несколько запросов - один callback
Здравствуйте.
Скажите почему не отрабатывает callback когда все запросы успешны. У меня что крыша поехала, на ровном месте тупняк!
incJS : function(path, clb){
var length = path.length, deferreds = [], idx = 0. isJS = [];
for( ; idx < length; idx++ ){
if( ! isJS[path[idx]]){
isJS[path[idx]] = true;
deferreds.push($.ajax({url:path[idx], dataType:'script', cache:false}));
}
}
$.when.apply(undefined, deferreds).then(function(){
if(clb && $.isFunction(clb)) clb();
});
}
incJS(['1.js','2.js','3.js'], function(){
console.log('Все запросы выполнены успешно.');
})
|
вторая строка, точка после нуля? :blink:
|
Нет это я сейчас опечатался, у меня там зпт
|
Evgeny_Dedov,
данный скрипт и загружаемые лежат в одной папке? не критично, но лучше isJS = {}, а не []; |
Нет, но в консоле все запросы указывают на правильные пути, все запросы
успешны 200, в ответе прилетают все скрипты.. |
Evgeny_Dedov,
версия jQuery? |
jquery_v1.10.1
|
Evgeny_Dedov,
замените на 1.12.4 или выше |
Нет к сожалению не помогло..
Отрабатывает с точностью наоборот, первый вызов - тишина, все последующие - callback... |
А так работает?
/**
* @author Mikhailov «Nexus» Artem
* @site [url]https://vk.com/nexus94[/url]
*/
var require,requirePathPrefix='';
(function(){
let __loaded_libraries={};
const getArguments=function(args){
return (args[0] instanceof Array)?args[0]:[].slice.call(args);
};
const get=function(type,args){
if(!args.length)
return Promise.resolve();
return require(
getArguments(args).map(function(path){
return {
type:type,
src:path
};
})
);
};
const Interface={
js:function(url){
return get('js',arguments);
},
css:function(url){
return get('css',arguments);
}
};
require=function(){
if(!arguments.length)
return Interface;
const prom=Promise.all(getArguments(arguments).filter(function(path){
path=(!!path.src&&!!path.type)?path:path.split('#').shift().split('?').shift();//remove hash and get-params
return (!__loaded_libraries[path] || !!path.src) && ['css','js'].indexOf(
!!path.type?
path.type:
path.split('.').pop().toLowerCase()
)>-1;
}).map(function(path){
return new Promise(function(resolve,reject){
__loaded_libraries[!!path.src?path.src:path]=true;
let is_js=(!!path.type?
path.type:
path.split('#').shift().split('?').shift().split('.').pop().toLowerCase()
)==='js',
file_path=(!!path.src?path.src:path),
src=((file_path.substr(0,2)==='//' || file_path.indexOf('http')===0)?'':requirePathPrefix)+
file_path.replace('nocache','nocache='+Math.random()),
node=document.createElement(is_js?'script':'link'),
attrs=is_js?{
type:'text/javascript',
src:src
}:{
type:'text/css',
href:src,
rel:'stylesheet'
};
for(let i in attrs){
if(attrs.hasOwnProperty(i))
node.setAttribute(i,attrs[i]);
};
node.onload=resolve;
node.onerror=reject;
document.head.appendChild(node);
});
}));
prom.catch(function(){
alert('Не удалось загрузить файл. Обновите, пожалуйста, страницу.');
});
return prom;
}
})();
require(['1.js','2.js','3.js']).then(function(){
console.log('Все запросы выполнены успешно.');
});
|
Хочется понять почему выше указанный код не работает, я понимаю что можно объехать задачу, но что за глюк то?
|
Цитата:
|
Evgeny_Dedov, может проблема в контексте?
Попробуйте undefined заменить на "jQuery" или на "$". |
Ну не хочет, я уже и кэш чистил, перезагружал комп, отрабатывает наоборот, при первом вызове - тишина, при втором и следующих - callback
|
Цитата:
|
Я говорю всё наоборот, это нормально? То есть отрабатывает как - см. ниже
$.when.apply(undefined, requests).then(function(){
console.log('Всё хреново.');
}, function(){
console.log('Всё ОК.');
});
|
Да это я всё знаю, я говорю почему так всё поменялось и как это исправить? Я второй день хожу вокруг этого детского сада. Что нет на таком популярном форуме гуру всёзнайки)
|
Три успешных запроса статус 200.
В консоле: Request failed: url "/js/admin/content_func.js?_=1528540673657" status "200" |
https://api.jquery.com/jquery.ajax/#data-types
Цитата:
|
Да, действительно дело в скрипте...
Только там не синтаксическая ошибка, а он был настроен на авто запуск функции. Прилетает объект модуля:
WKCMS.CONTENT = (function(){
var varNameClass = '/admin/content/index/';
// Публичные методы
var publicMethod = {
init : init,
viewPages : viewPages,
newPageForm : newPageForm
}
function init(){
...
...
...
}
...
...
...
})();
$(function(){
WKCMS.CONTENT.init();
})
Вот без этих строк работает:
$(function(){
WKCMS.CONTENT.init();
})
Бля, качеля двухдневная... Спасибо за ответы. И кто нибудь может пояснить данное поведение. |
Там нет парсееррор, Если скрипт добавляется на стр. не ajax'ом
|
| Часовой пояс GMT +3, время: 16:26. |