这是一个我用来从XML文档中检索文本的简单函数。它在每个浏览器中都能正常运行,但它经常(并非总是)在iPad上的Safari上失败。
如果失败,则会返回带有消息
的412
状态代码
无法加载资源:服务器响应状态为412(前置条件失败)。
当我在iPad上测试时,我在无线上,而我的其他测试都是通过有线连接完成的。我也在手机上试过,我也没有任何问题。错误只发生的事实有时让我想知道它是否与某种竞争条件或时间问题有关,但我在这里完全失去了。
function getText(page, ID){
if(languageText == null){
url = directory + "/text/" + language + "/text.xml";
$.ajax({
url: url,
type: "post",
dataType: "xml",
async: false,
success: function(data, status, jqXHR){
console.log(data);
languageText = $(data);
}, error: function(jqXHR, textStatus, errorThrown){
console.log(errorThrown);
console.log(jqXHR);
}
});
}
var selector = "page[id='" + page + "'] text[id='" + ID + "']";
result = languageText.find(selector).text();
return result;
}
答案 0 :(得分:4)
iOS7如何处理重复的相同POST请求实际上似乎存在问题。
http://www.looseideas.co.uk/ios-7-412-precondition-failed
我将POST改为GET,似乎解决了这个问题。
答案 1 :(得分:1)
使用异步连接
async: true
在iPad https://www.google.com/search?q=syncronous+ajax+ipad+safari上有几个与同步连接和Safari有关的问题。
答案 2 :(得分:1)
另一个问题可能是,如果没有数据发生更改,apache会回复状态代码为412而不是304(未修改)的帖子请求(感谢http://avnwx.blogspot.co.at/2011/10/debuggers-lie.html指出这一点!)。
为了确保每个帖子请求都不同,我只需添加
'?uuid=' + new Date().getTime()
到ajax请求的url(不是发布的数据!)。
示例请求:
jQuery.ajax({
cache: false,
data: {
start: 1,
},
url: 'http://127.0.0.1/test.php?uuid='+new Date().getTime(),
success: function(){ alert('success'); }
}
答案 3 :(得分:0)
看起来像mod_security问题。
将它放在.htaccess文件中:
<Files text.xml>
SecFilterInheritance Off
</Files>