1NetMedia_Blog

<< 限制图片大小并垂直居中显示  类别: Ajax 45种缓动效果(强悍) >>
解决 Ajax 中“完成该操作所需的数据还不可使用”的错误
[ 日期: 2009-09-18 6:27:39 PM | 作者: admin | 来源: 围城杂文 | 人气:9275 | 晴天 | 心情: +2 ] 字号: 【
急速栏目链接:
文章评论系统中在IE出现了"完成该操作所需的数据还不可使用"的错误,用百度、Google搜索这些错误,发现没有一个能解决此问题的。

搞了N天,没有解决,所幸,这个错误并不影响网站文章的评论,虽然提示这个错误,但是网站的文章仍然可以评论,但是在IE下面那个黄色的小图标实在是太难看了,一定要把他解决。

网上有人讲是没有判定状态,即:
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{

但我所在的程序的确是判定了的,也有人说是JS版本太高不稳定所致。改成他们那样还是不能解决问题。

后来又怀疑自己的判定状态的if写得太复杂了,可能在特定情况下会出错,仔细研究了所写的if语句,也没有发现逻辑上的错误。

后来通过对比分析没有出错的支持/反对功能的Ajax脚本,心里一阵狂喜,肯定是这里了!!

问题出错在于:在判定状态之前取得了返回的数据。

问题代码的错误部份(仅写出出错的部份代码)

............前面略掉一些代码
xmlhttp.open("POST",URL,true);
xmlhttp.setRequestHeader("cache-control","no-cache");
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//xmlhttp.send(datapost);
xmlhttp.onreadystatechange = function()
{
//alert(xmlhttp.responseText);
var ReData = xmlhttp.responseText; //配合viewtop.asp的BbsCode()函数
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
DIVID.innerHTML = BbsCode(ReData);
..............后面略掉一些代码。

下面是正确的代码(请注意红色部份的位置)

xmlhttp.open("POST",URL,true);
xmlhttp.setRequestHeader("cache-control","no-cache");
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//xmlhttp.send(datapost);
xmlhttp.onreadystatechange = function()
{
//alert(xmlhttp.responseText);
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{ var ReData = xmlhttp.responseText; //配合viewtop.asp的BbsCode()函数
DIVID.innerHTML = BbsCode(ReData);

...................

Ajax必需先判定正确的状态后才取回返回的数据。希望对正有此难题的朋友有用!

   
Rss Comment  

Quote descusr    Posted at 2010-08-07 2:06:56 AM
我的是在判断之后取回的数据都有用耶~楼主说的有点片面。。


发表评论
请先注册,才能发表评论!
- 注册 -