Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2014, 00:42
Интересующийся
Отправить личное сообщение для lionsgate Посмотреть профиль Найти все сообщения от lionsgate
 
Регистрация: 24.02.2013
Сообщений: 11

помогите с кодом
Возникла необходимость трансформировать xml+xslt на стороне клиента, скачал плагин jQuery, но он старый и не работает с новыми версиями jQuery, я бы хотел наладить работу этого плагина, ну вобщем ближе к сути...
Фрагменты кода:
var xm = {
                    readyState: 4
                };
                var xs = {
                    readyState: 4
                };

...
                var change = function() {
                    if (xm.readyState == 4 && xs.readyState == 4  && !transformed) {
                        var processor = new XSLTProcessor();
                        if ($.isFunction(processor.transformDocument)) {
                            resultDoc = document.implementation.createDocument("", "", null);
                            processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null);
                            target.html(new XMLSerializer().serializeToString(resultDoc));
                        }
                        else {
                            processor.importStylesheet(xs.responseXML);
                            resultDoc = processor.transformToFragment(xm.responseXML, document);
                            target.empty().append(resultDoc);
                        }
                        transformed = true;
                    }
                };
...
                    //xm = $.ajax({ dataType: "xml", url: xml});
                    //xm.onreadystatechange = change;

					$.ajax({
						url: xml,
						dataType: 'xml',
						crossDomain: false,
						success: change
					});
...
                    //xs = $.ajax({ dataType: "xml", url: xslt});
                    //xs.onreadystatechange = change;
					$.ajax({
						url: xslt,
						dataType: 'xml',
						crossDomain: false,
						success: change
					});

Закомментированные строки это старый код, проблема в передачи объектов xm и xs функции change по событию success.
В JavaScript я недавно да и спросить в реале некого, поэтому прошу помощи у знающих людей, здесь.
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2014, 01:20
Интересующийся
Отправить личное сообщение для lionsgate Посмотреть профиль Найти все сообщения от lionsgate
 
Регистрация: 24.02.2013
Сообщений: 11

А вот, вроде понял:
$.ajax({
	url: xml,
	dataType: 'xml',
	crossDomain: false,
	success: function(date, textStatus, jqXHR) {
		xm = jqXHR;
		xm.handler = change;
		xm.handler()
	}
});

Кстати вот этот плаги о котором говорил:http://johannburkard.de/software/xsltjs/

Последний раз редактировалось lionsgate, 18.12.2014 в 01:22.
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2014, 01:37
Интересующийся
Отправить личное сообщение для lionsgate Посмотреть профиль Найти все сообщения от lionsgate
 
Регистрация: 24.02.2013
Сообщений: 11

Нет все равно не работает как нужно. В функции change обработка данных начинается не дождавшись готовности обоих объектов сразу xm и xs из-за этого косяк. Есть мысль поставить значения параметру readyState
по 0 обоим объектам, а затем в change проверять готовность данных используя setInterval?
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2014, 06:39
Интересующийся
Отправить личное сообщение для lionsgate Посмотреть профиль Найти все сообщения от lionsgate
 
Регистрация: 24.02.2013
Сообщений: 11

Оказалось все проще нужно заменить:
var xm = {
                    readyState: 4
                };
                var xs = {
                    readyState: 4
                };

на:
var xm = {
                    readyState: 0
                };
                var xs = {
                    readyState: 0
                };

плюс еще я заметил код не работает в IE8, ну это уже несовместимость .append() с IE8, необходимо заменить:
$('body').append(xm).append(xs);

на обычные JavaScript функции:
var bbody = document.getElementsByTagName('body')[0];
bbody.appendChild(xm);
bbody.appendChild(xs);

На всякий случай выложил пофиксенный скрипт http://www.fayloobmennik.net/4410033
Забавно - задал вопрос и на него же ответил.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом! poondek Общие вопросы Javascript 2 25.08.2014 13:27
ПОМОГИТЕ С КОДОМ В JAWA SKR Кодер Ваши сайты и скрипты 1 31.07.2013 16:10
Ребята помогите с кодом, один день до теста:) 1989prone Общие вопросы Javascript 0 10.02.2013 03:29
помогите с кодом кликандера андрей1234 Общие вопросы Javascript 5 26.11.2012 21:23
Помогите с кодом сохранения параметром CheckBox-ов в куки Konstantine jQuery 0 26.05.2012 16:20