jQuery $ .getScript在一半时间内不起作用

时间:2016-05-12 02:24:17

标签: javascript jquery ajax cordova mapquest

我正在使用jQuery从cordova onDeviceReady函数中的Mapquest加载脚本。但是,一半时间脚本无法正确加载,并且无法使用这些功能。

   $.ajax({
    url: "http://www.mapquestapi.com/sdk/leaflet/v2.s/mq-geocoding.js?key=sv99PLA3H8jGWSa1a097UKewBWrNWLWN",
    dataType: 'script',
    success: function(){alert('hello')},
    async: false
  });

我可以更改任何内容以确保脚本始终正确加载吗?该脚本始终能够发出警报('hello'),但即使这样,这些函数也无法始终正常工作。

1 个答案:

答案 0 :(得分:-1)

您可以在没有$.getScript功能的情况下动态加载脚本,如下所示:

function loadScript ( src, callback )
{
    var script = document.createElement ( 'script' );
    script.type = 'text/javascript';
    script.async = true;
    script.onerror = function ( err )
    {
        throw new URIError('The script ' + err.target.src + ' is not accessible.');
    }

    if(callback && typeof callback == 'function')
        script.onload = callback;

    document.head.appendChild(script);
    script.src = src;
}

它的作用是:

  1. 创建< script>元件;
  2. 告诉浏览器它应该异步加载,以便在加载时不会中断其余的资源;
  3. 使用onerroronload事件提供有关脚本加载的反馈;
  4. 将脚本附加到< head>并设置src使其实际加载。
  5. 在你的情况下,你会像这样使用它:

    loadScript ( "http://www.mapquestapi.com/sdk/leaflet/v2.s/mq-geocoding.js?key=sv99PLA3H8jGWSa1a097UKewBWrNWLWN", function ( )
    {
        alert(1);
    } );
    

    兼容性

    请注意,async属性不适用于所有浏览器:http://caniuse.com/#feat=script-async