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

在Ajax加载页面后执行JavaScript脚本-不起作用

孟承嗣
2023-03-14
问题内容

我正在尝试使用AJAX创建一个页面,但是当我获得该页面并且它包含Javascript代码时,它不会执行。

为什么?

我的ajax页面中的简单代码:

<script type="text/javascript">
alert("Hello");
</script>

…并且它不执行它。我正在尝试使用Google Maps
API并通过AJAX添加标记,因此,每添加一个标记,我都会执行一个AJAX页面,该页面将获取新标记,并将其存储在数据库中,并应将标记“动态”添加到地图中。

但是,由于我无法以这种方式执行单个javascript函数,该怎么办?

我在页面上定义的函数是预先保护的还是私有的?

使用AJAX功能更新

function ajaxExecute(id, link, query)
{
    if (query != null)
    {
        query = query.replace("amp;", "");
    }

    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            if (id != null)
            {
                    document.getElementById(id).innerHTML=xmlhttp.responseText;
            }
        }
    }

    if (query == null)
    {
        xmlhttp.open("GET",link,true);
    }
    else
    {
        if (query.substr(0, 1) != "?")
        {
            xmlhttp.open("GET",link+"?"+query,true);
        }
        else
        {
            xmlhttp.open("GET",link+query,true);
        }
    }
    xmlhttp.send();
}

Deukalion解决方案

var content = xmlhttp.responseText;

if (id != null)
{

    document.getElementById(id).innerHTML=content;
    var script = content.match("<script[^>]*>[^<]*</script>");

    if (script != null)
    {
        script = script.toString().replace('<script type="text/javascript">', '');
        script = script.replace('</script>', '');
        eval(script);

    }
}

在某些事件上,我不得不在脚本中添加事件侦听器,而不仅仅是执行“ select onchange
=’executeFunctionNotIncludedInAjaxFile();’“我必须为此添加addEventListener(”
change“,functionName,false)。在正在评估的脚本中。


问题答案:

当通过执行将容器的innerHTML内容设置为某些更新的内容来更新页面时,浏览器根本不会在其中运行脚本。您可以找到<script>标签,获取标签innerHTML(IE可能更喜欢innerTEXT),然后eval()自己编写脚本(这与jQuery差不多,尽管jQuery在更新DOM之前使用了正则表达式来查找脚本)。



 类似资料:
  • 问题内容: 我将datepicker附加到全局脚本文件中的输入中,如下所示: 在特定页面上,模态对话框(还有jquery ui)中有输入(将与datepicker一起使用),我通过$ .load()调用该页面并注入其他页面的div中。 上面的代码对于其他页面中的静态输入非常有效,但对于上面的scenerio,它显示的是datepicker对话框很好,但是当我单击一个日期时,它会抛出错误(f未定义)

  • 问题内容: 我需要在ajax加载后添加一个类。首先,我给一些元素提供一个“就绪”类,该类可以启动CSS过渡。单击链接li#menu- item-318a时,它将删除ready类,该类将反转CSS转换,然后加载新的html文档。在Aja加载中,我再次想将ready类添加到Ajax调用插入的相同元素中。 下面的代码有一个回调,可以添加ready类,它可以工作。但是,当Ajax加载其集合时,Ready类

  • 问题内容: 我正在使用inside 执行外部脚本。 现在,由于脚本是 在 页面加载 之前 执行的,因此我无法访问。在文档“加载”后(HTML已完全下载并在RAM中),我想执行一些JavaScript。执行脚本时,是否有任何我可以挂上的事件,这些事件将在页面加载时触发? 问题答案: 这些解决方案将起作用: 要么 甚至 请注意, 最后一个选项是更好的选择,因为它不引人注目并且被[认为是更标准的。

  • 问题内容: 我正在使用jquery地址插件来加载页面,但是没有hash(#)。 index.html: page.html: 在#content div中将从page.html中加载#content html(也许我应该使用其他函数,而不是.html(),请纠正我),因为div是script标签,但是加载该页面时我没有收到警告从ajax开始,无需加载ajax就可以运行。有人能帮我吗 ? 编辑:当我

  • 问题内容: 我使用jQuery的.load函数将一些HTML代码加载到div中,其中包含要执行的一些代码; 加载ajax请求后,alert(); 函数起作用,但是someFunction无法起作用。 如何从Ajax调用执行此功能 执行的功能也不起作用。 问题答案: 可能您应该使用jQuery.getScript从服务器加载一些javascript并执行它。 更新: 在大多数情况下,仅加载纯HTML

  • 我在谷歌上搜索了几个小时,但我找不到任何正确的答案!