jQuery getScript не работает, или я использую его неправильно

Как и @Iftah, установите encoding: null.

Полный пример (меньше обработки ошибок):

request = require('request');
zlib = require('zlib');

request(url, {encoding: null}, function(err, response, body){
    if(response.headers['content-encoding'] == 'gzip'){
        zlib.gunzip(body, function(err, dezipped) {
            callback(dezipped.toString());
        });
    } else {
        callback(body);
    }
});
0
задан Green Grasso Holm 15 January 2019 в 21:11
поделиться

4 ответа

Благодаря @ freedomn-m, который упомянул Promises в последующем комментарии к ответу, я натолкнулся на предыдущую статью, в которой обсуждается $ .when (). Done () в Как включить несколько js-файлов, используя jQuery $ Метод .getScript () . Это привело к сценарию, который работал:

<!DOCTYPE html>

<script src="/xyz/scripts/jquery-1.11.0.min.js"></script>
<script>
    $.when(
        $.getScript("myModule.js")
    ).done(function() {
        console.log(wow);
        console.log(wow());
    });
</script>

<h1>Demo</h1>
0
ответ дан Green Grasso Holm 15 January 2019 в 21:11
поделиться

getScript - это асинхронный метод , поэтому вам нужно обращаться к его переменным в обратном вызове следующим образом:

$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
  console.log( data ); // Data returned
  console.log( textStatus ); // Success
  console.log( jqxhr.status ); // 200
  console.log( "Load was performed." );
});

Your console.log (wow); был выполнен до полной загрузки скрипта.

0
ответ дан Amr Elgarhy 15 January 2019 в 21:11
поделиться

$. getscript

https://api.jquery.com/jquery.getscript/

Это сокращенная Ajax-функция, которая эквивалентно:

$.ajax({
  url: url,
  dataType: "script",
  success: success
});

, поэтому $.getscript выполняет асинхронный вызов, поэтому ваш код эквивалентен:

  • $. getscript - начать загрузку сценария
  • console.log (wow) - пока не могу найти его, так как скрипт еще не загружен
  • ... завершить загрузку скрипта

Вы можете использовать обратный вызов выполнить код после загрузки скрипта:

$.getScript("myModule.js", function() {
    console.log(wow);
    console.log(wow());
});
0
ответ дан freedomn-m 15 January 2019 в 21:11
поделиться

Вызов getScript() является асинхронной операцией, он не блокирует выполнение остальной части JavaScript. У вас есть два варианта:

1) Обернуть скрипт, требующий содержания getScript() в $(document).ready(), чтобы отложить выполнение до тех пор, пока все не загрузится.

2) Передать обратный вызов в качестве второго аргумента getScript. Этот обратный вызов будет выполнен, если getScript() завершится успешно.

0
ответ дан Justin Pearce 15 January 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: