2011-07-25 46 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 <頭>部分。