1

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");
?>

ショーン・リウ、あなたの助けに大いに感謝します

4

2 に答える 2

1

async: trueajaxプロパティで設定してみてください。10秒はタイムアウトと見なすことができます。

于 2012-08-31T04:05:35.777 に答える
0

これはサファリのバグです。他のブラウザでも同じコードが正常に機能するため、async:falseが存在する場合にのみサファリで機能しなくなります。

于 2013-05-28T09:39:29.510 に答える