Where are scripts loaded after an ajax call?

后端 未结 5 529
日久生厌
日久生厌 2020-12-11 05:44

suppose you have a simple web page that dynamically loads content that looks like this:

- main.html -




        
5条回答
  •  星月不相逢
    2020-12-11 06:36

    ok, after many struggles, I've implemented Kevin B's solution into a plugin useful to others. Improvements welcome! (should I maybe put it in github?)

    - loadWithJs.js -

    // inspired by Kevin B's suggestions
    // at: http://stackoverflow.com/questions/8234215/where-are-scripts-loaded-after-an-ajax-call
    
    (function ($) {
        $.fn.loadWithJs = function (o) {
            var target = this;
            var success = o.success;
    
            o.success = function (html) {
                // convert script tags
                html = $('
    ').append( html.replace(/<(\/)?script/ig, "<$1codex") ); // detach script divs from html var scripts = html.find("codex").detach(); // populate target target.html(html.children()); // loop through scripts and append them to the dom scripts.each(function () { var script = $(this)[0]; var scriptNode = document.createElement('script'); for (var i = 0; i < script.attributes.length; i++) { var attr = script.attributes[i]; $(scriptNode).attr(attr.name, attr.value); } scriptNode.appendChild( document.createTextNode($(script).html()) ); target[0].appendChild(scriptNode); }); if (success) success(); }; $.ajax(o); }; })(jQuery);

    then the caller can do:

    $(function() {
        $('#main').loadWithJs({
             type: 'get', cache: false, 
             url: '/svc.html',
             success: function() { console.log('loaded'); }
        });
    });
    

提交回复
热议问题