2016-03-02 40 views
3

我有一個問題,我從OmniFaces的JSF庫中使用ViewState修復:fixviewstate.js。問題是我們在我們的應用程序中遇到了IE的奇怪行爲,在第二個AJAX請求到達同一頁之後,data.responseXML = {}。奇怪的是,responseText被正確設置。在這種情況下,viewState的值=' - '。然後將此值提交給服務器,並且JSF引發IndexOutOfBoundsException。JSF ViewState修復IE響應XML

這隻發生在IE中,但不會在開發人員工具啓用時發生。我認爲這可能與IE AJAX緩存問題,但:

  • 那些職位要求
  • 內容類型正確設置爲text/xml
  • 的Cache-Control:no-cache標題是套

你能幫忙嗎?

回答

4

我終於搞定了。它發生,雖然反應是這樣的:在IE

<update id="javax.faces.ViewState"><![CDATA[-1644237968690251221:-7863929220167075939]]> 

update.firstChild.nodeValue只返回文本的一部分 - 有時只有「 - 」,有時是「-1644237968690251221」。這一切都取決於瀏覽器如何將文本切分爲文本節點。根據規範,它可以以任何方式做到這一點。 所以我們只需要調用update.textContent。

+0

很好找!我將調查瀏覽器兼容性,然後在OmniFaces本身中應用此修復程序。編輯:它出現[IE6-8](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent)不喜歡這個,應該使用innerText。你可以確認是否返回更新[i] .textContent ||更新[i] .innerText;'在​​IE(模擬)版本上適合你? – BalusC

+0

那麼,更新[i] .textContent ||更新[我] .text似乎工作。但我只是用jQuery版本$(更新[i]).text()。 – pshemu