ajax代码点滴:Post数据问题

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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值