Несколько запросов - один 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, время: 06:35. |