在iPad上使用iOS 5 Safari的最新版jQuery 1.6,我注意到我所有的ajax调用都失败了。这些相同的ajax调用在我尝试的所有其他浏览器上按预期工作,我很确定他们也在使用iOS 4的Safari版本(尽管我可能错了)。还有其他人经历过这种行为吗?如果是这样,是否有修复或解决方法?下面是一个简单的jQuery AJAX调用的简单示例,该调用在iOS 5的Safari中返回错误。提前感谢任何见解!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
</head>
<body>
<a id="my-link" href="javascript:;">Click Me!</a>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#my-link").bind("click", function() {
jQuery.get("test.php", function(data) {
alert(data);
});
});
});
</script>
</body>
</html>
答案 0 :(得分:14)
我刚才有类似的问题。我有
$.ajax({
type: 'post',
url: 'http://IP../ws',
data: {1:1},
dataType: 'json',
success: function(response) {
if (lng.Core.toType(callback) === 'function') {
// setTimeout(callback, 100, response);
callback(response);
}
},
error: function(xhr, type) {
console.log('error')
if (error) {
setTimeout(error, 100, result);
}
}
});
更改了网址:'http://IP../ws',改为网址:'ws',
我根本不是一个jQuery用户,但必须将它用于一个项目,所以不确定这对你有帮助,但对我有用。
答案 1 :(得分:1)
重新启动Safari - 保留它并从正在运行的任务中将其终止。
我已经读过的其他内容与安全上下文和跨站点脚本攻击的预防有关,并且当Safari以前在不同的网络上运行并且现在在没有它的情况下现在在新的网络上时,Safari没有做得很好。在改变网络之间停止。
今天自己动手,用纯HTML / JavaScript / PHP XMLHttpRequest请求。
答案 2 :(得分:1)
我遇到过一个问题,即jQuery ajax调用在Safari浏览器的IPad中失败。错误是您无权访问页面/目录。我通过将Ajax async属性更改为true来解决此问题。
$.ajax({
type: 'GET',
url: "".
async: true,
cache: true,
crossDomain: false,
contentType: "application/json; charset=utf-8",
dataType: 'json',
error: function (jqXHR, err) {
console.log(jqXHR.responseText);
alert("Error" + jqXHR.responseText);
},
success: function (data, status) {
});
答案 3 :(得分:0)
Safari Mobile中存在一个错误,如果有任何文件正在进行,突然意外地会给AJAX调用带来麻烦。在使用Content-Disposition: attachment;
标头下载后,Safari可以开始发送“OPTIONS”http消息而不是POST。您可以通过在Safari Mobile和服务器之间使用Fiddler来查看是否发生这种情况,以查看Safari正在发送的HTTP消息。
重新启动时,Safari Mobile中的“条件”将重置。
此处Stackoverflow: JQuery Ajax stopped working with IOS 5.0.1进行了详细审核。
答案 4 :(得分:0)
我必须做到这一点,以便在错误时重新尝试20次才能使其正常工作。代码示例:
function my_original_function(form)
{
my_original_function_ajax(form, 1);
}
function my_original_function_ajax(form, attempts)
{
console.log('Attempts #'+(attempts));
jQuery.ajax({
type: 'POST',
url: form.action,
processData: false,
data: $(form).serialize(),
cache: false,
success: function(html){
console.log('success!!');
},
error: function (xhr, status, error) {
// make up to 20 attempts if error
if (attempts <= 20) {
my_original_function_ajax(form, attempts + 1);
}
}
});
}
答案 5 :(得分:0)
我遇到了同样的问题,但我最终发现了一些不同的东西。
我有类似的东西:
function load_one(var1 = null, var2 = null) { ... }
function load_two() { ... }
之后我有了
$(window).load(function() {
load_one(var_x, var_y);
load_two();
});
Chrome,Firefox,Safari for OSX,Safari for iPhone,Chrome for iPhone,一切正常,但在Edge和Safari for iPad上没有任何效果。所以我在Edge上打开它,在开发人员工具中,它在定义load_one
函数的行上显示错误。
我不确定它是什么,但错误说) expected
所以我决定删除函数参数的默认值,一切都突然起作用。我不确定javascript是否存在默认参数值问题,但显然某些浏览器存在问题。