2016-03-02 58 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