当前位置: 首页 > 面试题库 >

如何在通过ajax加载的html中运行javascript

高高雅
2023-03-14
问题内容

我有一个index.php文件,可通过此javascript / ajax代码加载其他php文件:

function AJAX(elementID,url,showStatus){
var httpObject;
if (window.ActiveXObject) {
    httpObject = new ActiveXObject("Microsoft.XMLHTTP");
}
if (window.XMLHttpRequest){
    httpObject =  new XMLHttpRequest();
}
else {
    alert("Your browser does not support AJAX.");       
}

if (httpObject != null) {
    httpObject.onreadystatechange = function() {          
        if (elementID != false){

            if (httpObject.readyState == 4 && httpObject.status == 200) {                  
                document.getElementById(elementID).innerHTML= httpObject.responseText;

            } 
        }

    }

    httpObject.open("POST",url,true);
    httpObject.send(null);  
}
}

因此,例如,我将通过以下方式在inxex.php中加载文件:

<script>
AJAX("updateThisDiv", "/includes/contentpage.php", false)
</script>

这会将“ contentpage.php”的内容粘贴到div“ updateThisDiv”中,但是现在如果我在“
contentpage.php”上有任何JavaScript,它将无法运行,有什么办法吗?

我已经看过了:http
:
//www.javascriptkit.com/script/script2/ajaxpagefetcher.shtml,
但它并不是我要找的东西。

我希望能够更新页面的一部分而无需重新加载整个页面,并且必须运行javascript


问题答案:

如果要按需加载Javascript。这可以通过动态创建脚本标签来完成。Stoyan
Stefanov
书-Javascript
Patterns中说明了这种模式

这是从书中摘录的:

编写一个require函数。然后这样称呼它:

require("extra.js", function () {
    functionDefinedInExtraJS();
});

样品要求功能:

function require(file, callback) {

    var script = document.getElementsByTagName('script')[0],
        newjs = document.createElement('script');

    // IE
    newjs.onreadystatechange = function () {
        if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
            callback();
        }
    };

    // others
    newjs.onload = function () {
        callback();
    };

    newjs.src = file;
    script.parentNode.insertBefore(newjs, script);
}


http://www.jspatterns.com/book/8/ondemand.html中找到的实时示例

@Edit:针对您的情况的更多详细信息。我将尝试使事情变得简单:

创建fours文件:

  • index.php:测试文件。
  • code.js:具有Ajax,getJS,getHTML函数的实际代码
  • content.php:任何可以打印纯HTML而无需任何JS的PHP文件
  • content.js:要动态运行的javascript代码。

index.php

<html>
    <head>
        <script src="code.js"></script>
    </head>
    <body>
        <input type="button" onclick="Ajax('content.php', 'd_html');" value="Fill from content.php"/>
        <div id="d_html"></div>
        <br>
        <input type="button" onclick="Ajax('content.js', 'd_js');" value="Fill from content.js"/>
        <div id="d_js"></div>
    </body>
</html>

content.php

<span>Hello, I am dynamic span came from content.php</span>

content.js

//Ana javascript code you want to run it by Ajax function should go inside this function
function executeJS(element){
   element.innerHTML = "<span>Hello, I am dynamic span came from content.js</span>";
}

code.js

//This function responsible for doing the ajax request for any file that will return pure HTML.
function getHTML(url, element){
    var i, xhr, activeXids = [
        'MSXML2.XMLHTTP.3.0',
        'MSXML2.XMLHTTP',
        'Microsoft.XMLHTTP'
    ];

    if (typeof XMLHttpRequest === "function") { // native XHR
        xhr =  new XMLHttpRequest();        
    } else { // IE before 7
        for (i = 0; i < activeXids.length; i += 1) {
            try {
                xhr = new ActiveXObject(activeXids[i]);
                break;
            } catch (e) {}
        }
    }

    xhr.onreadystatechange = function () {
        if (xhr.readyState !== 4) {
            return false;
        }
        if (xhr.status !== 200) {
            alert("Error, status code: " + xhr.status);
            return false;
        }

        element.innerHTML += xhr.responseText;
    };

    xhr.open("GET", url, true); 
    xhr.send("");
}

//This function will load javascript file on-demand and call executeJS function inside that file.
function getJS(url, element, cb){
    var newjs = document.createElement('script');

    // IE
    newjs.onreadystatechange = function () {
        if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
            cb();
        }
    };

    // others
    newjs.onload = function () {
        cb();
    };

    newjs.src = url;
    element.appendChild(newjs);
}


//This is same as your function, but now can handle both PHP and JS files
function Ajax(url, id){
    var element = document.getElementById(id),
        regex = /\.js$/;
    if(!element){
        alert("Invalid ID");
        return false;
    }

    if(regex.test(url)){ //If url ends with JS, load using getJS
        getJS(url, element, function(){
            executeJS(element);
        });
    } else {
        getHTML(url, element);
    }
}


 类似资料:
  • 问题内容: 浏览器:Chrome V65 ChromeDriver:chromedriver.exe 2.37 网络驱动程序尝试单击元素时发生错误。以下是我的click(): 我已经等待元素可见,然后单击。但是引发异常,说“其他元素将获得点击”,如下所示: 即使我添加语句以等待ajax加载完成以单击元素,也会发生错误: 这种情况在Chrome上经常发生,可能是5次出现4次故障。没用! 现在,我必须

  • 问题内容: 我想我有一个非常简单的问题,但找不到解决方案。因此,我要通过HTML加载DIV内容。问题在于它不仅是文本,而且是图像。Ajax调用返回HTML代码,但是该代码在DIV中显示为HTML,并且不会执行。难以解释,但从示例中可以明显看出… AJAX调用返回字符串: 问题很明显。我得到的是实际的代码,而不是图像和div中的3.3°C,因此,我看到的不是图像,而是img src =…。 我知道我

  • 问题内容: 我在使javascript代码在AJAX加载的div内运行时遇到问题,我试图包含jquery选项卡,但它不起作用,ajax仅输出文本,无法识别javascript。你能帮忙的话,我会很高兴。 这是我的js代码: 和HTML: 问题答案: 我还没有检查所有代码,但是您使用什么来触发将Javacript加载到div中?窗口/文档就绪功能仅在页面最初加载时触发一次。 尝试将以下内容用于加载到

  • 问题内容: 好的,所以我对ajax和从外部加载内容还很陌生,希望对我的问题有任何见解。 我目前有一个隐藏的div,它是空的,单击链接后应该在其中加载ajax内容。 我目前有一个链接列表,所有链接都具有相同的类,并且我想在单击空白div时进行幻灯片切换,然后从链接要访问的页面中加载内容。 链接: 当前的jQuery: 刚接触Ajax并加载外部内容时,我想知道如何从位于标签中的链接页面加载内容。因此,

  • 我需要在JSP中包含内容,而不使用include指令。 使用执行服务器端包含是很容易的,但是在容器将JSP转换为Servlet之前,的内容会添加到JSP中。这意味着,如果includeme.htm被修改,则更改不会反映在生成的Servlet文件中。我厌倦了进入Tomcats generated files目录手动删除生成的java和类文件,或者每次包含的文件发生变化时重新部署我的应用程序。 我是否

  • 问题内容: 最近,我通过更复杂的项目更改了编码样式,以“按需”加载页面(及其嵌入式脚本)。但是,很难像加载时那样调试这些脚本: 要么 这些脚本可以完美运行,但是,如果要调试,如何在这些动态加载的页面和脚本中设置断点? 问题答案: 更新 现在,接受的表单带有(标签)而不是(符号) 语法进行了更改,以避免与IE条件编译语句和其他一些问题发生冲突(感谢Oleksandr Pshenychnyy和Varu