2016-12-14 1 views
1

Я загружаю Mootools динамически в часть сценария приложения (AutoWWW), потому что он не позволяет напрямую использовать HTML.Mootools Request.HTML возвращает undefined

Я использую Request.HTML и хочу получить html страницы, но он возвращает сообщение «undefined». Как я могу это исправить?

Мой код:

function loadScript(url, callback) { 
    // Adding the script tag to the head as suggested before 
    var head = document.getElementsByTagName('head')[0]; 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = url; 

    // Then bind the event to the callback function. 
    // There are several events for cross browser compatibility. 
    script.onreadystatechange = callback; 
    script.onload = callback; 

    // Fire the loading 
    head.appendChild(script); 
} 

var mootools = new Request({ 
    url: 'http://google.com', 
    method: 'get', 
    onSuccess: function(responseText){ 
     alert(responseText); 
    } 
}); 

loadScript("https://ajax.googleapis.com/ajax/libs/mootools/1.6.0/mootools.min.js", mootools); 
+0

Не уверен, что именно вы пытаетесь сделать, вы можете лучше объяснить? Для меня это похоже на то, что вы пытаетесь загрузить библиотеку MooTools с помощью методов MooTools до ее загрузки даже с сайта MooTools, который не является CDN. – Sergio

+0

Я только что отредактировал свой пост и изменил URL-адрес запроса, поскольку он был запутанным, и я установил его на домашнюю страницу, чтобы проверить. В основном я хочу вернуть HTML-код url, например google.com, с GET и отобразить его в сообщении. Функция loadScript не является mootools, функция должна работать и загружать mootools.min.js, а затем вызывает функцию обратного вызова mootools, которая запускает запрос GET с использованием библиотеки. – zeddex

ответ

1

Есть 2 вещи, которые вы должны принимать во внимание. Один из возможных ограничений CORS, другой - то, что когда вы делаете head.appendChild(script);, он будет загружать сценарий асинхронно.

Это означает, что MooTools будет загружен, но он будет недоступен до тех пор, пока не вызывается функция callback. Чтобы исправить это, вы должны иметь обратный вызов внутри функции loadScript, и изнутри этот обратный вызов вызывает другой обратный вызов, который был передан как аргумент функции.

function loadScript(url, callback) { 
 
    // Adding the script tag to the head as suggested before 
 
    var head = document.getElementsByTagName('head')[0]; 
 
    var script = document.createElement('script'); 
 
    script.type = 'text/javascript'; 
 

 
    script.onreadystatechange = callback; 
 
    script.onload = function() { 
 
    new Request({ 
 
     url: 'https://jsonplaceholder.typicode.com/posts/1', 
 
     method: 'get', 
 
     onSuccess: callback 
 
    }).send(); 
 
    }; 
 
    script.src = url; 
 

 
    head.appendChild(script); 
 
} 
 

 
loadScript("https://ajax.googleapis.com/ajax/libs/mootools/1.6.0/mootools.min.js", function(text) { 
 
    alert(text); 
 
});

+0

Спасибо, что это работает, просто интересно, какая была бы лучшая практика для запуска других функций mootools, кроме json-запроса? Например, если я хотел вызвать функцию POST также, как функции упакованы внутри друг друга, а обратные вызовы сбивают с толку. – zeddex

+0

@zeddex внутри обратного вызова, который вы передаете функции loadScript, вы можете добавить код MooTools, там MooTools добавлен на страницу. Поэтому замените предупреждение в примере кодом MooTools. – Sergio

Смежные вопросы