<html>
<head><title></title></head>
<body>
<iframe id="myifr">
<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个</code>
</data>
</xml>
</iframe>
</body>
</html>
请高手写一下JS获取iframe中xml的code中这段“我就要读这个”
<head><title></title></head>
<body>
<iframe id="myifr">
<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个</code>
</data>
</xml>
</iframe>
</body>
</html>
请高手写一下JS获取iframe中xml的code中这段“我就要读这个”
四楼:这是用IFRAME跨域请求,远端返回XML,需要获取返回值并处理,跨域请求已经解决了,现在就是获取的问题,JS已经延时处理过了,获取的肯定是XML文件。在IFRAME中FF-BUG中已经看到了返回值就是我贴出来的,现在要求取出这个XML文件并获取节点内容,所以才这么写代码
<iframe id="myifr">
<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个 </code>
</data>
</xml>
</iframe> alert($($('#myifr').html()).filter('code').text());
<iframe id="myifr">
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<code>我就要读这个 </code>
</data>
</iframe> alert($($('#myifr').html()).filter('code').text());
<data>
<code>我就要读这个 </code>
</data>
</xml>
是这个
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<code>我就要读这个 </code>
</data>
不是这个
我也注意到这个区别了。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
无标题页
</title></head>
<body>
<form name="form1" method="post" action="WebForm1.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSQD9Q3HDt+gXxVAR6MoQPeTvR5mg==" />
</div>
<div>
<iframe src="XMLFile1.xml" id="myifr">
</iframe>
</div>
<div>
<input type="button" value="测试" onclick="fnGetCode();"/>
<script type="text/javascript">
function getXMLDom(path) {
/// <summary>
/// 加载xmlDom
/// </summary>
var xmlDoc = null;
try {//Internet Explorer
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
} catch (e) {
try {//Firefox, Mozilla, Opera, etc.
xmlDoc = document.implementation.createDocument("", "", null);
} catch (e) {
alert("加载xml文档失败:" + e.message);
}
}
try {
xmlDoc.async = false;
var b = xmlDoc.load(path);
if (b) {
return xmlDoc;
}
} catch (e) {
alert("加载xml文档失败:" + e.message);
return null;
}
}
function fnGetCode(){
var xmlDoc=getXMLDom(document.getElementById("myifr").src);
alert(xmlDoc.getElementsByTagName("code")[0].text);
}
</script>
</div>
</form>
</body>
</html>
XMLFile1.xml<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个 </code>
</data>
</xml>
document.getElementById('myifr').innerHTML.match(/<code>(\w+)<\/code>/g);
alert(RegExp.$1);
alert(RegExp.$1);
alert(RegExp.$1);
function getXmlDoc(){
document.getElementById('txt').innerHTML.match(/ <code>([\d\w\u4e00-\u9fa5]+) <\/code>/g);
alert(RegExp.$1);
}
<input type="button" onclick="getXmlDoc();" value="获取">
<textarea name="txt" id="txt"><code>99902</code></textarea>
alert(RegExp.$1);
//xmlDoc.getElementsByTagName("code")[0]
function createXmlDoc(xmlText) {
if (!xmlText) return null;
try {
var xmlDom = new ActiveXObject("Microsoft.XMLDOM")
xmlDom.loadXML(xmlText)
return xmlDom
}
catch (e) {
try {
return new DOMParser().parseFromString(xmlText, "text/xml");
} catch (e) {
return null;
}
}
}
拜请神人xmliy赐教
不纠结那个测试的了 是否<code>的<>要转意?死活为空
firebug里看到的返回就是
<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个 </code>
</data>
</xml>
HTML打印出来也是这样
貌似说准了,的确什么都取不出来纠结啊
document.getElementById('myfrm').innerHTML.match(/<code>([\w\u4e00-\u9fa5]+)<\/code>/g);
alert(RegExp.$1);
还有,<script>要放到iframe之后
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script language="javascript">
function getIframeData(){
/* do something */
var f = document.getElementById("myfrm");
if (f){
f.src = "http://888.pok88.com/app/api/testxml.php"
}else{
var IframeObj = document.createElement("iframe");
IframeObj.id= "myfrm";
IframeObj.width =0;
IframeObj.height =0;
IframeObj.frameborder = 0;
IframeObj.src="http://888.pok88.com/app/api/testxml.php"; IframeObj.name = "myfrm";
document.body.appendChild(IframeObj); window.frames.myfrm.name = "myfrm";
}
//getXmlDoc()
setTimeout("getXmlDoc()",2000)
}
function getXmlDoc(){
document.getElementById('myfrm').innerHTML.match(/ <code>([\d\w\u4e00-\u9fa5]+) <\/code>/g);
alert(RegExp.$1);
}</script>
</head><body>
<input type="button" onclick="getIframeData();" value="提交">
<input type="button" onclick="getXmlDoc();" value="获取">
<iframe width="0" height="0" name="myfrm" id="myfrm" src=""></iframe>
</body>
</html>
我把代码贴出来吧
XML返回值已经修改了FF中只返回
<data>
<code>我就要读这个 </code>
</data>
<head><title>
无标题页
</title> <script src="../../Js/jquery.js" type="text/javascript"></script>
</head>
<body>
<form name="form1" method="post" action="WebForm1.aspx" id="form1">
<div></div> <div>
<iframe src="XMLFile1.xml" id="myifr" name="myifr">
</iframe>
</div>
<div>
<input type="button" value="测试" onclick="fnGetCode();"/>
<script type="text/javascript">
function fnGetCode(){
var obj=null;
if (document.all){//IE
obj = document.frames["myifr"].document;
alert($(obj).find(".tx").text());
}else{//Firefox
obj = document.getElementById("myifr").contentDocument;
alert($(obj).find("code").text());
}
}
</script>
</div> </form>
</body>
</html>
document.getElementById('myfrm').contentWindow.document.body.innerHTML.match(/<code>([\d\w\u4e00-\u9fa5]+)<\/code>/g);
alert(RegExp.$1);
obj = document.frames["myifr"].document;会出错!拒绝访问,同域访问无所谓的是可以的
28搂能否劳驾给个后台跨域的实例,我看我那个是不是有写错的地方,我用的
Http=server.createobject("WinHttp.WinHttpRequest.5.1")来做的
var f = document.getElementById('myfrm');
f.onload = function () {
document.getElementById('myfrm').contentWindow.document.body.innerHTML.match(/<code>([\d\w\u4e00-\u9fa5]+)<\/code>/g);
alert(RegExp.$1);
}
loadXML = function(xmlFile)
{
var xmlDoc;
if(window.ActiveXObject)
{
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.load(xmlFile);
}
else if (document.implementation&&document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load(xmlFile);
}
else
{
return null;
}
return xmlDoc;
}// 首先对xml对象进行判断
checkXMLDocObj = function(xmlFile)
{
var xmlDoc = loadXML(xmlFile);
if(xmlDoc == null)
{
alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
}
alert("我要取的值="+ xmlDoc.getElementsByTagName("code")[0].childNodes[0].nodeValue);
}当然,如果你要解析的xml文件可能不存在,那么这种写法就不能用,因为当被解析的文件不存在而你又想做一些其他操作的话,这时候在FF是会出错的,因为此时typeof xmlDoc.getElementsByTagName("code")[0] == 'undefined'.希望对你有帮助
window.onload = (function() {
$.ajax({
type: "GET",
url: "test.asp",
cache: false,
dataType: "xml",
success: function(xmlDoc) {
alert(xmlDoc.getElementsByTagName("Code")[0].childNodes[0].nodeValue);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
debugger;
}
});
});
</script>
test.asp,发送请求,获取xml文档输出到客户端
<%
Response.Charset="UTF-8"
Response.ContentType="text/xml"
Dim s
s= GetHttpPage("http://888.pok88.com/app/api/testxml.php","UTF-8")
Response.Write(s)Function GetHttpPage(url, charset)
Dim http
Set http = Server.createobject("Msxml2.ServerXMLHTTP")
http.Open "GET", url, false
http.Send()
If http.readystate<>4 Then
Exit Function
End If
GetHttpPage = BytesToStr(http.ResponseBody, charset)
Set http = Nothing
End function
Function BytesToStr(body, charset)
Dim objStream
Set objStream = Server.CreateObject("Adodb.Stream")
objStream.Type = 1
objStream.Mode = 3
objStream.Open
objStream.Write body
objStream.Position = 0
objStream.Type = 2
objStream.Charset = charset
BytesToStr = objStream.ReadText
objStream.Close
Set objStream = Nothing
End Function
%>
window.onload=function(){
//var nodes=document.getElementById("myifr").document.body.childNodes[0].childNodes;
var testStr=document.getElementById("myifr").innerHTML
//方法一
/*
alert(window.decodeURI(testStr));
var reg=/[(<)|<]code[ \t\r\n]?[(>)|>].*?[(<)|<]\/code[ \t\r\n]?[(>)|>]/gi;
alert(reg.exec(decodeURI(testStr)));
*/
//方法2
testStr=testStr.replace(new RegExp("<","gi"),"<").replace(new RegExp(">","gi"),">");
alert(testStr);
var xmldoc=null;
try{
xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.loadXML(testStr);
}catch(e){
xmldoc=new DOMParser().parseFromString(testStr,"text/xml");
}
for(var i=0;i<xmldoc.childNodes[0].childNodes.length;i++){
if(xmldoc.childNodes[0].childNodes[i].nodeName=="data")
for(var j=0;j<xmldoc.childNodes[0].childNodes[i].childNodes.length;j++){
if(xmldoc.childNodes[0].childNodes[i].childNodes[j].nodeName=="code")
alert(xmldoc.childNodes[0].childNodes[i].childNodes[j].childNodes[0].nodeValue);
}
}
}
</script>
<script type="text/javascript">
window.onload=function(){
//var nodes=document.getElementById("myifr").document.body.childNodes[0].childNodes;
var testStr=document.getElementById("myifr").innerHTML
//方法一
/*
alert(window.decodeURI(testStr));
var reg=/[(<)|<]code[ \t\r\n]?[(>)|>].*?[(<)|<]\/code[ \t\r\n]?[(>)|>]/gi;
alert(reg.exec(decodeURI(testStr)));
*/
//方法2
testStr=testStr.replace(new RegExp("<","gi"),"<").replace(new RegExp(">","gi"),">");
alert(testStr);
var xmldoc=null;
try{
xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.loadXML(testStr);
}catch(e){
xmldoc=new DOMParser().parseFromString(testStr,"text/xml");
}
for(var i=0;i<xmldoc.childNodes[0].childNodes.length;i++){
if(xmldoc.childNodes[0].childNodes[i].nodeName=="data")
for(var j=0;j<xmldoc.childNodes[0].childNodes[i].childNodes.length;j++){
if(xmldoc.childNodes[0].childNodes[i].childNodes[j].nodeName=="code")
alert(xmldoc.childNodes[0].childNodes[i].childNodes[j].childNodes[0].nodeValue);
}
}
}
</script>