AJAX陷阱

一.AJAX在FF(Firefox)上同步请求的问题.
最近在使用AJAX过程中发现:IE和FF(firefox)对异步请求(即open时用ture参数)的支持都正常,但在处理同步
请求时表现不一,IE支持很好,FF在调用send时却会freeze up,好象假死,并且在收到响应后不会fire(激活)
用onreadystatechange注册的回调函数,也就是说下面的handle_upload_flag()并不会被执行.
我的解决办法是直接检查响应内容...
...
if (navigator.appName == 'Microsoft Internet Explorer')
{   
 on_object_change('/UE/get_upload_flag?',handle_upload_flag,false); //处理响应的代码放在handle_upload_flag()中 
}
else
{
 on_object_change('/UE/get_upload_flag?',handle_upload_flag,false); // FF并不会激活handle_upload_flag()
 var results=http_request.responseXML.getElementsByTagName("option"); // 因此处理响应的代码直接copy在此.
 upload_flag=results[0].firstChild.nodeValue;   
}
...

var http_request = null;
function createXMLHttpRequest()
{
 http_request = null;
 if (window.XMLHttpRequest)
 {
  http_request = new XMLHttpRequest();
  if (http_request.overrideMimeType)
  {
   http_request.overrideMimeType('text/xml');
  }
 } else if (window.ActiveXObject)
 {
  try
  {
   http_request = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
   try
   {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
   }
   catch (e)
   {
    alert("Cannot create an XMLHTTP instance");
   }
  }
 }

 if (!http_request)
 {
  alert('Giving up :( Cannot create an XMLHTTP instance');
  return false;
 }
}

function on_object_change(url,handle,syn)
{
 createXMLHttpRequest();
 http_request.onreadystatechange = handle;
 http_request.open("GET",url, syn);
 http_request.send(null);
}

二.AJAX陷阱(以下来自于http://swik.net/Ajax/Ajax-Development-Gotchas)

1.XMLHttpRequest can’t access remote servers.
  我的解说:XMLHttpRequest不能存取当前server之外的server,这是由浏览器的安全限制所规定的.
2.Multiple Ajax Requests are not fired in order.
  解说:多个异步请求时,browser真正将它们发出时的顺序与在脚本里的send的顺序可能不一致.
  http_request.open("GET",url1, syn);
  http_request.send(null);
  http_request.open("GET",url2, syn);
  http_request.send(null);
  rul1,rul2的IP包发出去的顺序是不确定的.
3.Asynchronous XMLHttpRequests responses will arrive in no particular order.
  解说:多个异步请求时,收到响应包的顺序也是不确定的.既然是异步当然如此,p:)
4.XMLHttpRequest does not requires the use of XML.
  解说:XMLHttpRequest实际上不一定非得用XML,用text格式也可以,可能还更快,更容易.    
5.Ajax uses UTF-8
  解说:AJAX使用UTF_8字符集,因此传送汉字可要当心了,我没试过.
6.Ajax requests are url encoded. 
  解说:AJAX请求的语法规则遵守URL规范(RFC1738),请求中含有' ',%,#,&等字符的就要当心了,比如要用%23代替#字符,
       这个feature我没试过.
7.XMLHttpRequest cannot transmit files.
  解说:不能传送文件可能要令很多人失望了,但将来还是有希望的.
8:Ajax data transfer is text based  
  解说:只能传送text格式.

Firefox quirks or bugs
1.Synchronous XMLHttpRequests lock up Firefox.
  解说:FF的同步请求存在问题,已提及.

IE quirks or bugs
1.XMLHttpRequest Objects are not reused in IE.
  解说:IE每次send()之前必须创建一次XMLHttpRequest,不能create一次,多次使用,没验证过.

  以下几点与AJAX无关
2.IE doesn’t use cached images when Javascript inserts HTML with images.

3.Closures with circular references in IE cause memory leaks.

4.Avoiding aggressive caching in IE

5.IE corrupts gzipped JavaScript files.

6.IE doesn’t cache gzipped JavaScript files.
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值