jquery load() strips script tags - workaround?

后端 未结 6 408
孤街浪徒
孤街浪徒 2020-11-29 12:18

Does anyone know of a work around for jquery .load() stripping out the script tags loaded from external content?

There\'s a lot of documentation of the fact that thi

6条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-29 12:55

    jQuery load doesn't strip out script tags (example), and there are no script tags in the content you're returning from your PHP script. There is some JavaScript, but it's not correctly embedded in script tags and so it's not being recognized by the browser.

    If you want the JavaScript in this:

    ...
    '.$tag1.'
    $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")})
    '.$tag2.'
    ...
    

    to be recognized as JavaScript, put it in a script tag.

    ...
    '.$tag1.'
    
    '.$tag2.'
    ...
    

    ...or better yet, use a single script tag at the end of the content to hook things up, or the callback on the load function.


    Update: Re your edit:

    1) no type declaration in the opening script tag,

    Doesn't matter, see this updated example. The browser interprets the script tag according to the same rules it always applies.

    2) you're loading a page with script tags as part of the DOM, whereas I was loading php string output (I really don't think this matters tho', eh? By the time it hits the client it all comes to the same thing, no?)

    Right, it all comes to the same thing once it gets to the browser.

    3), your .load call was fetching a whole page whereas mine was returning only elements. I've since changed the output string to include all , and tags but grrrrrr...I still can't get dem damn script tags to show up in the DOM.

    My example is just loading a snippet, not a full page.

    I don't know why yours isn't working. I wondered if it related to multiple script elements being output in a loop, or the fact you were hooking up a click handler, but it's not either of those.

    There's nothing for it but to take your non-working example and peel layers away bit by bit until you find the part that, when you remove it, lets it start working. Fundamentally, again, it's not that using load makes the scripts not work (regardless of how many people you find who think that's the case; it's a big world, there are lots of people who think nearly anything). You have to let go of the idea that this is related to jQuery's load function doing anything to the scripts; it probably isn't.

    The key to debugging this kind of thing really is simplify, simplify, simplify. make sure the HTML being returned by the server for the ajax calls looks the way you think it does (no weird quotes or something). Try to do it with static pages. Etc.

提交回复
热议问题