AJAX返回的JavaScript不起作用。如何使用JavaScript?

AJAX返回的JavaScript不起作用。如何使用JavaScript?,javascript,ajax,Javascript,Ajax,这是我的页面Test1.asp <html> <head> <meta http-equiv="Content-Language" content="en-us"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>New Page 1</title> <script type="text/javascri

这是我的页面Test1.asp

<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>New Page 1</title>
<script type="text/javascript">
function Alex()
{
var xmlHttp;
try
  {  
  xmlHttp=new XMLHttpRequest();  }
catch (e)
  { 
   try
    {    
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");   
     }
  catch (e)
    {   
     try
      {     
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");   
          }
    catch (e)
      {      
      alert("Your browser does not support AJAX!");      
      return false; 
           }    
           } 
            }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      document.getElementById("Alex").innerHTML =xmlHttp.responseText;//Get Google Destination Map 
      }
    }
    xmlHttp.open("GET","Test2.asp" ,true);
    xmlHttp.send(null); 
   }
</script>
</head>

<body>
<div id ="Alex"></div>
<label onclick="Alex()" >ssss</label>
</body>
</html>

新的第1页
函数Alex()
{
var-xmlHttp;
尝试
{  
xmlHttp=newXMLHttpRequest();}
捕获(e)
{ 
尝试
{    
xmlHttp=新的ActiveXObject(“Msxml2.xmlHttp”);
}
捕获(e)
{   
尝试
{     
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}
捕获(e)
{      
警告(“您的浏览器不支持AJAX!”);
返回false;
}    
} 
}
xmlHttp.onreadystatechange=函数()
{
if(xmlHttp.readyState==4)
{
document.getElementById(“Alex”).innerHTML=xmlHttp.responseText;//获取谷歌目标地图
}
}
open(“GET”,“Test2.asp”,true);
xmlHttp.send(空);
}
ssss
这是第Test2.asp页请求的

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>New Page 1</title>
</head>
<body>
<div id="Mathew"></div>
</body>
<script type="text/javascript" >
{
document.getElementById("Mathew").innerHTML='ajax is working';      
}
</script>
</html>

新的第1页
{
document.getElementById(“Mathew”).innerHTML='ajax正在工作';
}
在页面(Test2.asp)中,javascript不工作


如何使用ajax调用test2.asp到test1.asp使用绝对URI而不是相对URL。

默认情况下,不执行包含ajax响应的JavaScript


当这个问题已经像jQuery和Prototype一样在各种库中得到解决时,从头开始构建Ajax处理程序是没有意义的。

在Javascript插入的HTML中不会自动执行(至少在IE中是肯定的)。唯一的解决方案是收集加载的HTML中的每个脚本块,并对每个脚本块进行评估

编辑

我在这里用YUI。。。Dom类可以收集给定块中的所有脚本标记

var domElement = document.getElementById("Alex");
var scriptBlocks = YAHOO.util.Dom.getElementsBy(function() {return true;},'script',domElement);
for (var i = 0 ; i < scriptBlocks.length ; ++i){
    eval(scriptBlocks[i].innerHTML);
}
var-domeElement=document.getElementById(“Alex”);
var scriptBlocks=YAHOO.util.Dom.getElementsBy(函数(){return true;},'script',domeElement);
对于(变量i=0;i
就这么简单。还要注意Internet Explorer。。。如果您使用ajax加载HTML,并且它作为第一个元素之一返回脚本块,那么出于某种奇怪的原因,它将忽略脚本块而不将其包含在响应中。要修复它,请在脚本块上方放置一个div,其中包含一个样式属性为display:none的文本

如果这是返回给IE的HTML,它将不会在响应中包含脚本块

<div>
   <script type="text/javascript">
     /* Some javascript */
   </script>
</div>

/*一些javascript*/
这将解决问题

<div style="display:none;">some text</div>
<div>
   <script type="text/javascript">
     /* Some javascript */
   </script>
</div>
一些文本
/*一些javascript*/
非常奇怪,但IE就是这样运行的。

通过
innerHTML
向文档中添加
元素(*)不会将其内容作为脚本执行

您还试图在
中插入整个HTML文档,包括
,这是非常无效的

如果您需要返回HTML和一些要执行的脚本,最好返回JSON对象,例如:

{
    "html": "<div id="Mathew"></div>",
    "js": "document.getElementById(\"Mathew\").innerHTML='ajax is working';"
}
{
“html”:“,
“js”:“document.getElementById(\“Mathew\”).innerHTML='ajax正在工作'
}
然后解析JSON对象,将
innerHTML
设置为
obj.html
eval
js
。(虽然返回和执行任意脚本通常是有问题的,但有时它也有用处。)


(*:通常不会。执行
元素的确切时间取决于浏览器。例如,Firefox在您将DOM HTMLScript元素或祖先追加/插入到文档的一部分元素时执行脚本,而IE在您第一次将元素插入任何父元素时执行脚本,无论n是否对文档进行编码。通常,避免将HTML内容中的JavaScript插入HTML。)

您的方法有点错误。通常,AJAX用于发送和接收非HTML格式的数据,如XML、JSON,有时甚至CSV(不过,HTML有时会返回给客户端,但通常是作为页面的一部分,而不是像您的示例中那样作为整个页面)

逻辑很少传输,通常在传输的各个方面进行维护。换句话说,客户端/请求端拥有自己的所有逻辑,并且已经知道如何处理从服务器/响应端返回的数据(也不接受或要求从客户端生成的任何逻辑)此外,通常需要使用
eval
,以一致地执行响应中的逻辑,这通常被认为是一种错误,因此

在某些情况下,从服务器接收逻辑作为响应的一部分可能是必要的、有利的或简单的。但是,在这些情况下,将数据与逻辑分离仍然是最佳做法


所有这些都可以很好地说明您做得不对。我鼓励您阅读AJAX的工作原理以及如何最好地使用它:,,(类似于我认为您正在尝试做的事情)最后,和的AJAX API文档。

有一个很好的处理方法。请查看字符串对象上的、和方法。如果您只是将脚本剥离,将文本放入div,然后放入evalscript,这将在所有BRWOSER中工作,因此脚本只执行一次。

请指定“不工作”的内容在xmlHttp.responseText中,通过“ajax正在工作”的test2.asp javascript中的结果为空事实上,我不同意。我从零开始构建了很多AJAX处理程序,它教会了我比从库中包含一个处理程序更多的东西。从学习的角度来看,至少一次手动操作是非常有价值的。你的第一点是有效的。你的第二点是有效的,除非有人尝试使用acqu但在我真正的test2.asp中,它使用了更多的javascript函数(传递不同的值),我给出了这样的答案