Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2011, 10:48
Аватар для alexpts
Новичок на форуме
Отправить личное сообщение для alexpts Посмотреть профиль Найти все сообщения от alexpts
 
Регистрация: 07.06.2009
Сообщений: 8

Помогите с отладкой "прилетевших" скриптов
Добрый день.

Столкнулся с такой проблемой не знаю что делать.

js скрипт(ы) подгружаются динамически с помощью ajax jQuery (или короткого метода $.getScript() ). Скрипт выполняется на странице, но в firebug во вкладки "сценарии" все "прилетевшие" через аякс скрипты не отображаются почему-то и я не могу отлаживать их. Хотя раньше подгруженные скрипты отображались в firebug и их можно было отлаживать. Попробовал уже все, что в голову пришло, прошу помочь, если кто-то сталкивался с этим.

Стоит последняя стабильная версия firefox 4.0.1 и последняя стабильная версия firebug 1.7.2.

Выглядит это приметно так:
http://s41.radikal.ru/i091/1106/48/d747ca76ae51.gif
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2011, 10:57
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Видимо скрипты подключаются в виде текста в теге <script>, а не как ссылка.
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2011, 11:09
Аватар для alexpts
Новичок на форуме
Отправить личное сообщение для alexpts Посмотреть профиль Найти все сообщения от alexpts
 
Регистрация: 07.06.2009
Сообщений: 8

Они отрабатывают, выполняя логику и манипулируя DOM, я думаю, что если бы они были как текст, то они бы не выполнялись.

Пробовал подключать вручную через метод $.ajax() с явным указанием dataType, а не $.getScript().

$.ajax({
			'type'		: "get",
			'dataType' 	: 'script', 
			'url'		: url,
			'cache' 	: true,
			'scriptCharset ' : 'UTF-8',
			
			'global '	: true,
			
			'success'	: function(data, status, XHR){
				alert( "success data: " + data );
				alert("success status: " + status);
			},
			
			'error'	: function(XHR, status){
				alert("error status: " + status);
			},
			
			'complete'	: function(XHR, status){
				alert("complete status: " +status);
			}
		});


Но тоже самое.

Хочу отметить, что раньше все работало. Сейчас убрал вообще все, оставив простенький пример с подгрузкой и все равно не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2011, 11:32
Аватар для alexpts
Новичок на форуме
Отправить личное сообщение для alexpts Посмотреть профиль Найти все сообщения от alexpts
 
Регистрация: 07.06.2009
Сообщений: 8

Добрый человек помог решить проблему, переопределением jQuery метода getScript()

Решение - http://stackoverflow.com/questions/6...cript-function
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2011, 19:41
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Недавно столкнулся с точно такой же проблемой. В основном программирую на чистом JS, потому как применение фреймворков бывает неуместно, либо запрещено заказчиком.

Сначала написал точно такую же функцию как в Вашем решении, но представил ситуацию когда необходимо подключить подряд более чем 2-3 файла - получается весьма немаленькая "лесенка" из вложенных коллбэков, поэтому от этого способа я отказался и прибегнул к синхронному AJAX запросу.

В таком случае в ответе приходит само тело файла:
<script type="text/javascript">{your script here}</script>

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

А вообще если приложение требует повышенной безопасности, то лучше все операции с алгоритмами выполнения, которые нужно скрыть от лишних глаз, предоставить серверу, а результаты запрашивать через SOAP или XML-RPC.

Последний раз редактировалось DreamTheater, 16.06.2011 в 21:39.
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2011, 23:51
Аватар для alexpts
Новичок на форуме
Отправить личное сообщение для alexpts Посмотреть профиль Найти все сообщения от alexpts
 
Регистрация: 07.06.2009
Сообщений: 8

$.ajax() тоже наверное синхронную подгрузку предполагает...

Важного ничего нет тут, просто делаю для внутреннего использования загрузчик js и css, который сам будет подтягивать логику и стили на страницу, если на ней есть какие-то элементы компонентов, чтобы это все было автоматизировано и не подключать на сервере в php скрипты явно.

Спасибо за ответы!
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2011, 11:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от DreamTheater
Зато серьезно испортит жизнь тем кто захочет сломать Ваше приложение
А ещё серьёзно испортит жизнь тем, у кого медленное соединение. Т.к. браузер зависнет наглухо на то время, пока будет качать скрипты.
Ответить с цитированием
  #8 (permalink)  
Старый 17.06.2011, 20:01
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сообщение от Kolyaj Посмотреть сообщение
А ещё серьёзно испортит жизнь тем, у кого медленное соединение. Т.к. браузер зависнет наглухо на то время, пока будет качать скрипты.
В любом случае раз скрипты загружаются, значит они для чего-то нужны, а раз нужны - приложение без них не будет работать, поэтому загрузятся они синхронно или асинхронно не имеет никакого значения (асинхронно имеет смысл только отправлять/запрашивать данные с сервера). Просто нужно на несколько секунд отвлечь внимание пользователя каким-нибудь симпатичным троббером.

Последний раз редактировалось DreamTheater, 17.06.2011 в 20:03.
Ответить с цитированием
  #9 (permalink)  
Старый 17.06.2011, 22:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от DreamTheater
В любом случае раз скрипты загружаются, значит они для чего-то нужны, а раз нужны - приложение без них не будет работать, поэтому загрузятся они синхронно или асинхронно не имеет никакого значения
Вы забываете, что в браузере не только ваш сайт. И пока сайт грузится в обычном режиме, я могу смотреть другой сайт в другой вкладке. В вашем случае нельзя будет сделать ничего. Это не говоря о том, что подвисшая по любой причине программа бесит неимоверно.
Ответить с цитированием
  #10 (permalink)  
Старый 17.06.2011, 22:30
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сообщение от Kolyaj Посмотреть сообщение
Вы забываете, что в браузере не только ваш сайт. И пока сайт грузится в обычном режиме, я могу смотреть другой сайт в другой вкладке. В вашем случае нельзя будет сделать ничего. Это не говоря о том, что подвисшая по любой причине программа бесит неимоверно.
Тогда единственно оптимальным решением остается асинхронное подключение скриптов с последующим вызовом callback.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать javascript для ВКонтакте roxana_babay Оффтопик 2 19.01.2011 06:43
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Динамическая подзагрузка и исполнение скриптов NT Man Javascript под браузер 2 28.08.2009 12:32
помогите задать селектор! mkrylov jQuery 2 28.06.2009 20:34