触发外部脚本并加载内容

时间:2015-07-16 16:23:34

标签: javascript jquery ajax

我使用$ .getScript触发了外部.js函数,完成后,我将内容加载到'div'元素('Result')。所以在完成所有工作之后,我想执行其他功能,比如说例如提醒已下载的内容(例如:#items)。但是,当我发出警报时,我认为整个内容还没有下载,所以它没有给我完全下载的内容。我怎样才能实现它?

$.getScript( "../js/script.js" )
          .done(function( script, textStatus ) {            
            load(function(){                
                $('Result').html();

            });
            alert($('#items').html());
          })
          .fail(function( jqxhr, settings, exception ) {
            alert( "Triggered ajaxError handler." );
          }); 

function load(callback)
    {
         $("#Result").load("/somepage.aspx", function (response, status, xhr){
          if ( status == "error" ) {
            var msg = "error: ";
            $( "#error" ).html( msg + xhr.status + " " + xhr.statusText );
          }
          if(callback){
            callback();
          }
        });                                         
    };  

<div id="Result"></div>    
<div id="error"></div>

3 个答案:

答案 0 :(得分:1)

我不确定您的代码是否正确,因为您获得了js,但在done上,您提供了#result的html,然后提醒{{html} { 1}}!这对我没有任何意义。您在#item下面写的load函数的作用是什么?

<强>更新 所以,你做了一些更新,我想你想要获取一个页面,没有任何回发,不是吗?

答案 1 :(得分:0)

如果下载的脚本依次下载其他内容,则很可能是异步完成。这意味着您需要进行以下更改:

将外部脚本包装在函数

做getScript

完成后,使用包含回调函数的参数调用该函数

在这个回调函数内做警告

将外部脚本函数中的事件处理程序附加到正在下载内容以调用该参数的任何内容。

所以例如你会做

builderFactory.setNamespaceAware(true)

并在newDocumentBuilder()

的脚本中 你会写

      load(function(){                
            $('Result').html();
             wrapperFunction(function(){
               alert($('#items').html());  
             });
        });

答案 2 :(得分:0)

所以,经过一番聊天,这是我的解决方案,希望这个帮助: 我制作了2个.html个文件,a.htmlb.html

a.html的内容:

<div></div>
<script>
    $.getScript("main.js", function() {
        $("div").load("b.html #items");
    });
</script>

b.html

<body>
    <script src="main.js"></script>
</body>

也是main.js档案的内容:

$('<div></div>', {
    text: 'I am alive !!!',
    id: '#items'
}).appendTo('body');

当我打开a.html时,我可以看到I am alive !!!

修改

请注意,我没有将main.js的链接添加到a.html

更新,此代码的结果相同:

$.getScript("main.js").done(function() {
        load();
    }).fail(function(jqxhr, settings, exception) {
        alert("Triggered ajaxError handler.");
    });

    function load() {            
        $("#Result").load("b.html #items", function(response, status, xhr) {
            if (status == "error") {
                var msg = "error: ";
                $("#error").html(msg + xhr.status + " " + xhr.statusText);
            }
        });
    };