SafariのjQueryajax()で問題が発生したため、テストする簡単なコードをいくつか作成しました。
リクエストはPHPファイルに送信され、10秒後、他のすべてのブラウザで「返されたデータ」を取得し、「成功」してから「完了」と警告します。ただし、Safariでは、「エラー」と「完了」を警告し、データを取得できません。
10秒を9(sleep(9);)に変更するだけで、Safariでも機能します。では、なぜSafariにとって10秒が重要なポイントなのですか?Safariをajax()の他のブラウザと同じように機能させるにはどうすればよいですか?
これはHTMLです:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("#submit").click(function () {
$.ajax({
async: false,
cache: false,
type: "POST",
timeout: 10000,
url: "processor.php",
dataType: "json",
success: function (data) {
$("#status").html(data);
alert('succeeded');
},
error: function (request, status, error) {
alert('error');
},
complete: function () {
alert('completed')
}
});
return false;
});
});
</script>
</head>
<body>
<div>
<input id="submit" type="button" value="send request" />
</div>
<div id="status"></div>
</body>
</html>
そしてこれはPHPコードです:
<?php
sleep(10);
echo json_encode("Returned Data");
?>
ショーン・リウ、あなたの助けに大いに感謝します