Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Несколько запросов - один callback (https://javascript.ru/forum/jquery/74057-neskolko-zaprosov-odin-callback.html)

Evgeny_Dedov 09.06.2018 11:08

Несколько запросов - один 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('Все запросы выполнены успешно.');
       })

j0hnik 09.06.2018 11:15

вторая строка, точка после нуля? :blink:

Evgeny_Dedov 09.06.2018 11:20

Нет это я сейчас опечатался, у меня там зпт

рони 09.06.2018 11:33

Evgeny_Dedov,
данный скрипт и загружаемые лежат в одной папке?
не критично, но лучше isJS = {}, а не [];

Evgeny_Dedov 09.06.2018 11:40

Нет, но в консоле все запросы указывают на правильные пути, все запросы
успешны 200, в ответе прилетают все скрипты..

рони 09.06.2018 11:41

Evgeny_Dedov,
версия jQuery?

Evgeny_Dedov 09.06.2018 11:44

jquery_v1.10.1

рони 09.06.2018 11:48

Evgeny_Dedov,
замените на 1.12.4 или выше

Evgeny_Dedov 09.06.2018 11:59

Нет к сожалению не помогло..
Отрабатывает с точностью наоборот, первый вызов - тишина, все последующие - callback...

Nexus 09.06.2018 12:05

А так работает?
/**
 * @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('Все запросы выполнены успешно.');
});


Часовой пояс GMT +3, время: 18:27.