2011-07-25 44 views
0

我正在使用grails来开发我的应用程序和'原型'库来做一个AJAX调用,其中 我在IE上遇到问题。在所有其他浏览器中,我的应用程序工作正常 这里是我的代码:grails IE ajax问题

<html> 
<g:form action="ajaxcall" id="recform"> 
    <g:select id="aseselect" name="art" from="${dropdownList}" optionKey="id" optionValue="value" noSelection="['':'- Select -']"/> 

    <g:submitToRemote action="ajaxcall" value="submit" update="updatediv" /> 
</g:form> 

<div id="updatediv"></div> 

</div> 
</html> 

这是我的控制器代码:

def ajaxcall = { 

    String toRender=""; 

    //code that makes db call and adds html into the toRender string 

    render toRender;  
} 

的“toRender字符串中包含这使得在Firefox,Chrome和Safari,但不是IE的罚款无序列表的HTML这似乎没有得到整个列表有时或获得一些空的列表时间。这种行为完全不可预测,取决于IE的情绪。

有没有人遇到过这个问题?我该如何解决这个问题?

感谢

+0

Possigle重复http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call –

回答

0

这是由于IE浏览器的缓存。我将

response.setHeader("Cache-Control", "no-store") 

控制器方法为ajax调用,它告诉浏览器不要缓存该响应。

所以,你的控制器的方法应该是这个样子:

def ajaxcall = { 

    response.setHeader("Cache-Control", "no-store") 

    String toRender=""; 

    //code that makes db call and adds html into the toRender string 

    render toRender;  
} 

这里有一个更详细的解释:

Grails: best way to send cache headers with every ajax call

+0

非常感谢答案。我遇到了你提到的文章。但是,我没有成功。我应该在哪里添加上面的代码?在我的'ajaxcall'内的控制器?我对Grails很陌生,所以我仍然在学习。 – Sfairas

+0

对不起 - 我更新了我的回复。是的,它应该采用控制器方法;你很可能需要手动清除IE的缓存/浏览记录。 –

+0

谢谢你。请放手一下,看看它是否会奏效。 – Sfairas

0

我固定的IE(11)浏览器的AJAX使用FORMDATA()后通过删除Grails控制器问题

< meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> 

或将其更改为

< meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 

在HTML <头>部分。