ajax代码,下面的内容来源与网络上。也有来源与csdn.net的。
用ajax代码实现定时刷新一个页面,这个程序有一小部分人经常出现IE死锁,点击没反应的状况,怀疑是ajax问题,请大家指点,有其他的可能么,该如何解决呢。
<script type="text/javascript">
<!--
var req;
//创建XMLHttpRequest对象
function createXmlHttp()
{
if (window.XMLHttpRequest)
{
req= new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
req =new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
req.onreadystatechange=callback;
}
else
{
alert("创建xmlhttp对象异常!");
return false;
}
}
function callback()
{
if (req.readyState == 4)
{
if (req.status== 200)
{
parseMessage();
}
// else
// {
// alert ("Not able to retrieve description" + req.statusText);
// }
}
}
function parseMessage()
{
//服务器返回的请求响应文本
var msg=req.responseText;
document.getElementById("msg").innerHTML =msg;
}
function setMsg()
{
createXmlHttp();
//建立到服务器的新请求
req.open("post","refresh.aspx",true);
//向服务器发送请求
req.send(null);
}
setInterval("setMsg()",1000);
//-->
</script>
--
怀疑是setInterval的问题.
试试看在createXmlHttp之前判断一下req是不是null,如果是的话直接跳过createXmlHttp,看看问题能不能解决.
--
function setMsg()
{
if ((req!=null) | |(req!=""))
{
createXmlHttp();
}
//建立到服务器的新请求
req.open("post","refresh.aspx",true);
//向服务器发送请求
req.send(null);
}
已经修改,正在观察,不知道有其他的可能性没有。刚开始都不死,过一会就死了
--
function setMsg()
{
if ((req!=null)||req!=""))
{
createXmlHttp();
}
//因为是异步而且使用了同个对象,还存在一个返回的问题,你得判断下对象是否已经返回了,不返回就不要open了
if(req.readyState!=0&&req.readyState!=4) return;//ajax对象未返回,直接返回,不执行下面的代码
//建立到服务器的新请求
req.open("post","refresh.aspx",true);
//向服务器发送请求
req.send(null);
}
--
req 在执行完后清空一下
req=null
--
function parseMessage()
{
//服务器返回的请求响应文本
var msg=req.responseText;
document.getElementById("msg").innerHTML =msg;
req=null ---在这加么
}
--
Post数据
我要的是form表单数据不是url传递的数据:
url="test.aspx";
xmlHttp.Open("post",url,true);
var data="Text1="+document.forms[0].elements['Text1'].value;
xmlHttp.onreadystatechange=result;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(data);
--
这个用Ajax很容易实现的
<input type="text" name="id" οnchange="sendRequest(this);">
当id表单字段失去焦点并且value属性发生改变引发onchange事件,这时发送一个请求到server,在server上将根据id查询出来的产品对象转换成xml返回给client,接着在client里解析这个xml自动的填写到对应的字段就OK了。
--
第一你要知道你需要的数据格式,也就是xml文件目录树结构需要几层。
比如
<?xml version="1.0" encoding="gb2312"?>
<NewDataSet>
<WL_CHTPB>
<OID>32819 </OID>
<HTBH>20041105 </HTBH>
<QDRQ>2004-11-16 </QDRQ>
<GFQC>湖南建筑集团第四分公司 </GFQC>
<HTJE>30710.00 </HTJE>
<YFJE>0 </YFJE>
<SWFQ>30710.00 </SWFQ>
</WL_CHTPB>
</NewDataSet>
数据库返回数据也就是重新构造xml文件,我用asp写的
比如:
keyword=request.QueryString("names")
sql="select company from client where company like '%"&keyword&"%'"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,cn,1,1
Response.ContentType="text/xml"
response.Write " <?xml version=""1.0"" encoding=""GB2312"" ?>"
response.Write " <response>"
do while not rs.eof
response.Write " <name>"&rs("company")&" </name>"
rs.movenext
loop
response.Write " </response>"
--
回调函数中response.responseText返回为什么是空串?
function goServer(url) {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
req = new ActiveXObject( "Msxml2.XMLHTTP ");
} catch (e) {
try {
req = new ActiveXObject( "Microsoft.XMLHTTP ");
} catch (e2) {
req = false;
}
}
}
req.onreadystatechange = processRequest;
req.open( "GET ", url, true);
req.send(null);
}
function processRequest() {
if (req.readyState == 4) {
if (req.status == 200) {
alert(req.responseText);
// parseMessages();
} else {
alert ( "error " );
}
}
}
--
ajax编码问题:
altas 是.net中的一个组件,应该它自身就包装了编码解码的过程吧。
Ajax用GB2312
使用POST的时候:
//如果传送参数是直接赋予的,就会产生乱码!
http_request.open("POST",url,true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=gb2312');
http_request.send("action="+strName+"&val="+val); //如果val的值为中文,则产生乱码
//解决方法很简单:使用javascript中的escape(string) 函数
http_request.open("POST",url,true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=gb2312');
http_request.send("action="+strName+"&val="+escape(val)); //val的值为中文不会产生乱码
使用GET的时候:
1、在html标签meta中加入content="text/html; charset=gb2312" 确认浏览器解析时的编码.
2、确认服务器层面上的编码方式
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")或者Response.Charset= "gb2312"
JSP:response.setHeader("Charset","GB2312");
--
将取得的值通过xml来发送
其中有中文,
应该怎么来处理,或者是xml还有什么格式吗?
-
建议把字符集设为utf-8,应该可以解决大部分
发送时escape(str),接受时unescape(str)
-
发送中文escape 如果用的GB 转码UTF8传递给AJAX
上次我开发一个无刷新评论就是乱码 后来转了UTF8后就OK了
--
Ajax和.NET交互默认编码为UTF8,前台页面编码如果非UTF8就会出现乱码。
后台代码添加即可解决问题:
Response.ContentEncoding = System.Text.Encoding.UTF8;