Ajax 调用innerhtml 中的js

来源:互联网 发布:网络水晶头价格 编辑:程序博客网 时间:2024/05/16 06:43

http://topic.csdn.net/u/20100414/20/40eccdf9-1a92-4ced-8b60-0cc172230b57.html?seed=1463081105&r=64678964#r_64678964

 

这段时间碰到上面所讲的问题,经过一翻波折总算是找到解决的方法,记录下来先。

 

再次保存留底:

 

程序的思想如下:

A.asp
<script>
function createhttpxml(){...}
function select(selectname,selectid){
var x=new createhttpxml()
...
x.open(get,b.asp,true)
x.send(null); 

}
  <input name='os' type='hidden' value='0' ><input name='os1' type='text' value=''>
  <a href='#' onclick="javascript:selecta('"&rs("software_name")&"','"&rs("software_id")&"')">os</a>
<div id='content1'></div>

B.asp
sqlstr="select * from tablea where fielda="&software_id 
rs.open sqlstr,conn,1,1
do while not rs.eof
  response.write "<a href='#' onclick=""javascript:selectvar(var1,var2,var3);"">"&rs("fieldb")&"</a>"
  rs.movenext
loop
rs.close
response.write "<script>function selectvar(var1,var2,var3){...}</script>"

为什么我在做A.asp点击selecta 时b.asp中的循环执行了结果也出来了,但是后面的<script>...</script>就不执行输出到A.asp的页面上来?而且我点击selectvar时浏览器报错讲缺少对象,我查看源文件发现没有后面的这个javascript脚本。
今天把完整的程序整出来,

JScript code
// publicfunc.js ***************part of all ************function createXMLHttpRequest(){ try { xmlhttp=new ActiveXObjec("Msxml2.XMLHTTP"); } catch (e) { try{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){ try{ xmlhttp=new XMLHttpRequest(); } catch (e){} } } return xmlhttp;}function configvar(varfield,mainkey,modkey){ var xmlhttp=createXMLHttpRequest(); var content=document.getElementById("content1"); content.style.display="inline"; xmlhttp.onreadystatechange=function() { if(4==xmlhttp.readyState) { if(200==xmlhttp.status) { document.getElementById("content1").innerHTML=xmlhttp.responseText; } else { alert(xmlhttp.status); } } } var url="selectvar.asp?modkey="+modkey+"&mainkey="+mainkey+"&varfield="+varfield; xmlhttp.open("get",url); xmlhttp.send(null); }

 

VBScript code
'human_config.asp Part of main<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><!--#include file="conn.asp"--><!--#include file="publicfunc.asp"--><!--#include file="sytable.asp"--><!--#include file="publicfunc.js"--><body><div id="tableContainer" class="tableContainer"><table border="0" cellpadding="0" cellspacing="0" width=100% class="scrollTable"><thead class="fixedHeader"><%response.write "<th><a href='human_config.asp?modkey=report&order=Username'>User Name</a></th>"response.write "<th><a href='human_config.asp?modkey=report&order=Position'>Position</a></th>"response.write "<th><a href='human_config.asp?modkey=report&order=Department'>Department</a></th>"response.write "<th><a href='human_config.asp?modkey=report&order=Company'>Company</a></th>"response.write "<th><a href='#'>SoftwareConfig</a></th>"response.write "<th><a href='#'>MachineConfig</a></th>"response.write "</tr>"response.write"</thead>"response.write "<tbody class='scrollContent'>"dim mainkey,modkeymainkey=request("mainkey")modkey=request("modkey")set rs=server.CreateObject("adodb.recordset")select case modkeycase "report" order=request("order") select case order case "Username" sqlstr="select * from clinet_config_view order by cuser_name" case "Position" sqlstr="select * from clinet_config_view order by cposition" case "Department" sqlstr="select * from clinet_config_view order by department" case "Company" sqlstr="select * from clinet_config_view order by company,department,cuser_name" case else sqlstr="select * from clinet_config_view order by company,department,cuser_name" end select rs.open sqlstr,conn,1,1 do while not rs.eof response.write "<tr><td>"&rs("cuser_name")&"</td><td>"&rs("cposition")&"</td><td>"&rs("department")&"</td>" response.write "<td>"&rs("company")&"</td>" response.write "<td><a href='human_config.asp?modkey=softmodfiy&mainkey="&rs("cuser_id")&"'>Config Software</a></td>" response.write "<td><a href='human_config.asp?modkey=hardmodfiy&mainkey="&rs("cuser_id")&"'>Config Hardware</a></td>" response.write "</tr>" if err then response.write err.description response.end end if rs.movenext loop rs.closecase "softmodfiy"sqlstr="select * from soft_type_table"rs.open sqlstr,conn,1,1if rs.eof then response.write "<script language='javascript'>alert('Found the Record');history.go(-1);</script>" response.endelse response.write "<form id='form1' name='form1' action='human_config.asp?modkey=softsave&mainkey="&mainkey&"' method='post'>" do while not rs.eof response.write "<tr>" response.write "<td colspan=3 align='right'><a href='#' onclick=""javascript:configvar('"&rs("soft_type_name")&"',"&rs("soft_type_id")&",'software');"">Config "&rs("soft_type_name")&"</a>" response.write "<input name='"&rs("soft_type_name")&"' type='hidden' value='0' ></td><td colspan=3 align='left'>" response.write "<input name='"&rs("soft_type_name")&"1' type='text' size='20' value=''>" response.write "</td></tr>" rs.movenext loop response.write "<tr align='right'><td colspan=3 ><input type='submit' value='Modifly' onclick='checkt();'></td><td colspan=3><input type='button' value='Close' onclick='self.close();return false;' ></td></tr>" response.write "</form>" response.write "<tr><td colspan=6><span id='content1' display: none;>Select...</span></td></tr>"end if rs.closeend select


//selectvar.asp

VBScript code
<!--#include file="conn.asp"--> <%Response.Charset="GB2312" set rs=server.createobject("adodb.recordset") modkey=request("modkey") mainkey=request("mainkey") varfield=request("varfield")select case modkeycase "software" sqlstr="select * from software_view where software_type="&cint(mainkey) rs.open sqlstr,conn,1,1 str="<table><tr><td>Software Name</td><td>Software Type</td><td>Software Series</td></tr>" do while not rs.eof str=str&"<tr><td><a href=""javascript:selectvar("&rs("software_id")&",'"&varfield&"','"&rs("software_name")&"')"">"&rs("software_name")&"</a></td><td>"&rs("soft_type_name")&"</td><td>"&rs("software_series")&"</td></tr>" rs.movenext loop rs.closecase else str="Can't found !"end selectstr=str&"<script>function selectvar(varid,varname,varfield){document.form1."&varfield&".value=varid;document.form1."&varfield&"1.value=varfield;}</script>" response.write str %>
我想做到的是在selectvar.asp中执行javascript的selectvar()时可以选中相对应的ID和名称。
但实际是执行报错:
Line:1
Char:1
Code:0
Error:缺少对象
网址:http://192.168.1.1/human_config.asp?modkey=softmodfiy&mainkey=2
我想应当是下面的这段javascript没有执行,有没有大侠帮助看下,如何调用才能获取到javascript脚本
"<script>function selectvar(varid,varname,varfield){document.form1."&varfield&".value=varid;document.form1."&varfield&"1.value=varfield;}</script>"

我有个简单的办法就是将要选中的ID先输出到public.js中,但如果数据库中soft_type_table的内容发生变化就需要增加相应的ID,这会不方便也会造成出错缺少对象。
经过简单修改后,可以达到我的目标了。

JScript code
function configvar(varfield,mainkey,modkey){ var xmlhttp=createXMLHttpRequest(); var content=document.getElementById("content1"); content.style.display="inline"; xmlhttp.onreadystatechange=function() { if(4==xmlhttp.readyState) { if(200==xmlhttp.status) { //document.getElementById("content1").innerHTML=xmlhttp.responseText; getinnerHTML(document.getElementById("content1"),xmlhttp.responseText); } else { alert(xmlhttp.status); } } } var url="selectvar.asp?modkey="+modkey+"&mainkey="+mainkey+"&varfield="+varfield; xmlhttp.open("get",url); xmlhttp.send(null); }function getinnerHTML (el, htmlCode) {var ua = navigator.userAgent.toLowerCase();if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {htmlCode = '<div style="display:none">for IE</div>' + htmlCode;htmlCode = htmlCode.replace(/<script([^>]*)>/gi,'<script$1 defer>');el.innerHTML = htmlCode;el.removeChild(el.firstChild);} else {var el_next = el.nextSibling;var el_parent = el.parentNode;el_parent.removeChild(el);el.innerHTML = htmlCode;if (el_next) {el_parent.insertBefore(el, el_next)} else {el_parent.appendChild(el);}}return el}