错误信息提示:
错误号:12142

错误原因:

错误SQL语句:
select * from user_skin where  find_in_set('sysai.net',replace(host,'|',','))

Warning: fopen(/error/2025-06-26.txt): failed to open stream: No such file or directory in /opt/lampp/htdocs/sysai/inc/datai.php on line 247
文件 2025-06-26.txt 不可写

sysai
『 444444 』
현재위치 : HOME > 자료실 > 444444
掌握AJAX之AJAX通讯技术简介3
글쓴이 : 매니저 작성일 : 2009-01-11

4. 隐藏iFrame

  新一代的客户端—服务器通信模式幕后所采用的是iframe,它是在HTML 4.0中引入的。iframe与帧基本是相同的,唯一的区别是iframe可以放在一个未设置帧集的HTML页面中,可以使页面中的任意部分成为一个帧。iframe技术可以在未预先设置帧集的页面中使用,能够更好地适应于功能的逐渐添加。iframe甚至还可以使用JavaScript在运行时创建,为了简单起见,语义化HTML(semantic HTML)支持使浏览器将Ajax功能看作是一个有益的增强(这将在稍后讨论)。由于可以用与普通帧相同的方法使用和访问iframe,因此它们都是Ajax通信的理想选择。

  发挥iframe的优势有两种方法。最简单的方法是在页面中简单地嵌入iframe,并像隐藏帧那样用来发出请求。为此,第一个例子中的显示页面将修改为:

<p>Enter customer ID number to retrieve information:</p>
<p>Customer ID: <input type="text" id="txtCustomerId" value="" /></p>
<p><input type="button" value="Get Customer Info"
onclick="requestCustomerInfo()" /></p>
<div id="divCustomerInfo"></div>
<iframe src="about:blank" name="hiddenFrame" width="0" height="0"
frameborder="0"></iframe>

  注意,这个iframe中的width、height和frameborder属性都设置成了0,这可将其从视线中隐去。由于iframe的名字仍是hiddenFrame,所以这个页面的JavaScript代码可以如前一样正常工作。不过,对于GetCustomerData.php页面还需要做一些小的修改。在该页面中的JavaScript函数先前是在名为displayFrame的帧中查找displayCustomerInfo()函数。如果你使用该技术,又不存在该名字的帧,则必须修改代码,用parent来代替它:

window.onload = function () {
 var divInfoToReturn = document.getElementById("divInfoToReturn");
 parent.displayCustomerInfo(divInfoToReturn.innerHTML);
};

  现在这个例子能够和本文中的第一例子一样正常工作了。

  第二种使用隐藏iframe的方法是通过JavaScript动态地创建它们。由于并非所有浏览器实现iframe的方法都是一样的,所以需要一些技巧,使得它有助于一步步地创建隐藏的iframe。

  第一步很简单,使用document.createElement()方法创建iframe并赋予必要的属性:

function createIFrame() {
 var oIFrameElement = document.createElement("iframe");
 oIFrameElement.width=0;
 oIFrameElement.height=0;
 oIFrameElement.frameBorder=0;
 oIFrameElement.name = "hiddenFrame";
 oIFrameElement.id = "hiddenFrame";
 document.body.appendChild(oIFrameElement);

 //更多代码
}

  本段代码的最后一行很重要,因为它将iframe添加到document结构中;没有添加到document中的iframe是无法执行请求的。另外注意,该iframe的name和id属性都是设置为hiddenFrame。这是必要的,因为有些浏览器是通过name属性访问新的帧,而有些则是通过id属性新的帧。

  紧接着定义一个全局变量,用来保存对该帧对象的引用。注意,针对iframe元素的这个帧对象并非是从createElement()函数返回的。要获得该对象,必须从帧集合中获取。以下就是即将保存在全局变量中的内容:

var oIFrame = null;

function createIFrame() {
 var oIFrameElement = document.createElement("iframe");
 oIFrameElement.width=0;
 oIFrameElement.height=0;
 oIFrameElement.frameBorder=0;
 oIFrameElement.name = "hiddenFrame";
 oIFrameElement.id = "hiddenFrame";
 document.body.appendChild(oIFrameElement);

 oIFrame = frames["hiddenFrame"];
}

  如果你将这些代码放到前面的iframe例子中,那么需要对requestCustomerInfo()函数进行如下修改:

function requestCustomerInfo() {
 if (!oIFrame) {
  createIFrame();
  setTimeout(requestCustomerInfo, 10);
  return;
 }

 var sId = document.getElementById("txtCustomerId").value;
 oIFrame.location = "GetCustomerData.php?id=" + sId;
}

  基于这些修改,该函数将会检查oIFrame是否为空。如果为空,则调用createFrame(),并会为该函数的调用设置10ms的超时时间。这是很必要的,因为只有IE浏览器能够立即识别插入的iframe,大部分其他浏览器需要花几毫秒来识别它,以允许通过它发送请求。当再次执行该函数时,将执行代码的其余部分,其中最后一行已经修改为对OIFrame对象的引用。

  尽管该技术能够很容易地应用于GET请求,但POST请求却完全不同。只有一部分浏览器允许你设置表单的target属性来动态创建iframe;但IE并不是其中的一种。因此,要使用隐藏iframe技术来发送POST请求还需要一些技巧。
 

목록


홈으로 | 이용안내 | 이용약관 | 개인정보보호정책 | 제휴문의 | 질문과답변 | 자주하는 질문
Copyright © 2011 - 2014 SYSAI Work Group, All Rights Reserved 주소:길림성연길시,우편:133300 Version 3.0 Run Time 0.207s