2012-06-04 141 views
1

我试图让AJAX页面,但是当我得到该页面,它包括Javascript代码 - 它不会执行它。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); 

    } 
} 

和某些事件,我必须在脚本的addEvent侦听器中,而不是仅仅使一个“select onchange ='executeFunctionNotIncludedInAjaxFile();'”我不得不为这个添加EventListener(“change”,functionName,false)。在正在评估的脚本中。

+2

请包括使AJAX请求和处理响应的代码示例。 –

回答

5

当你做类似的东西在里面设置一个容器的innerHTML增加了一些新内容,浏览器根本不会运行脚本更新网页。你可以找到<script>标签,获得他们的innerHTML(IE可能更喜欢innerTEXT),然后eval()脚本(这几乎是jQuery所做的,尽管它在更新DOM之前用正则表达式找到脚本)。

+0

我能够将脚本正则表达式,所以我只能得到脚本。然后我对他们运行eval,但它不适用于...说增加的DOM元素,其中有脚本,引用主要功能不通过AJAX加载。 – Deukalion

+0

如果服务器返回直接的JavaScript呢?这会让'eval'更容易使用。 (但要当心[CSRF](http://incompleteness.me/blog/2007/01/01/csrf-attacks-or-how-to-avoid-exposing-your-gmail-contacts/)。) –

+0

是的课程;如果你得到的是纯粹的JavaScript,那么这是一个不同的交易。了解信任问题显然很重要。 – Pointy

0

在AJAX请求之后,您可以创建一个“on success”函数,它可以接收返回的html并对其执行操作。 然后东西会被执行。

如果有代码示例,那么我可以提供一种代码解决方案。但仅使用标准的XMLHttpRequest,下面可以做:

xhr = new XMLHttpRequest(); 
xhr.open("GET","ajax_info.txt",true); 
xhr.onreadystatechange=function() 
{ 
if (xhr.readyState==4 && xhr.status==200) 
    { 
    document.getElementById("myDiv").innerHTML = xhr.responseText; 
    } 
} 
xhr.send(); 
​ 
+1

HTML有'

相关问题