Javascript onComplete for Ajax。缓存内容的请求错误

Javascript onComplete for Ajax。缓存内容的请求错误,javascript,ruby-on-rails,ruby,prototypejs,Javascript,Ruby On Rails,Ruby,Prototypejs,我有一个Ajax.Request,其中我使用onLoading和onComplete来显示和隐藏加载动画gif。问题是,每单击10次左右,加载动画就无法隐藏,即使ajax请求已成功返回,加载动画也会停留在那里。我有许多div元素,每个元素都有自己的加载动画和一个Ajax onclick <div id="word_block_<%= word_obj.word %>" class="word_block" > <%= image_tag("ajax-

我有一个Ajax.Request,其中我使用onLoading和onComplete来显示和隐藏加载动画gif。问题是,每单击10次左右,加载动画就无法隐藏,即使ajax请求已成功返回,加载动画也会停留在那里。我有许多div元素,每个元素都有自己的加载动画和一个Ajax onclick

    <div id="word_block_<%= word_obj.word %>" class="word_block" >
    <%= image_tag("ajax-loader_word_block.gif", :id => "load_animation_#{word_obj.word}",
                    :style => 'display:none') %>
    <a href="#" onclick="new Ajax.Request('/test/ajax_load', 
     {asynchronous:true, evalScripts:true, 
      onLoading:function() {
        Element.show('load_animation_<%= word_obj.word %>')},
      onComplete:function(){
        Element.hide('load_animation_<%= word_obj.word %>')}}); 
        return false;">Click Here</a>  
    </div>

“加载动画{word\u obj.word}”,
:style=>“显示:无”)%%>

这看起来有什么问题吗?也许我应该尝试删除内联onclick并使用javascript以编程方式添加onclick?我真的不知道为什么会这样。我正在使用ruby on rails的原型库。

我发现onload属性也很脆弱。。。假设您的查询已经被缓存,并且几乎直接返回到前端代码。现在让我们假设由于某种原因,执行onload方法比onComplete方法花费的时间更长。最后,让我们疯狂地假设ajax是异步的,它不会等到onload方法完成后再启动onComplete方法。然后你就有了问题的原因!总而言之: -请求已发送 -onLoading方法已启动,但由于某些原因尚未启动 -请求几乎立即返回 -onComplete方法被激发并立即启动 =>在开始加载之前完成onComplete方法:元素将隐藏然后显示

作为一种解决方法,为什么不在创建Ajax请求对象之前使用“Element.show('load\u animation')}”?那么您不依赖于onload方法和它附带的“异步性”了吗


同样,我总是在我的ajax请求中添加“requestHeaders:[“If Modified Since”,“Fri,Dec 1999 23:59:59 GMT”]”,以防止请求被缓存,特别是在IE中,缓存的ajax请求可能会把时间搞得一团糟

您可能已经检查过了,但以防万一:您确定
word\u obj.word
的所有值都是唯一的吗?如果您有任何重复项,那么您不能依赖
元素.show
元素.hide
来显示/隐藏所需的图像,相反,他们可能会在页面上显示/隐藏其他图像。很酷,这是一个很好的线索。谢谢