1

我在 Safari 中遇到了 jQuery ajax() 的一些问题,所以我创建了一些简单的代码来测试。

向 PHP 文件发送一个请求,10 秒后,在所有其他浏览器中,它会收到“返回数据”并提示“成功”然后“完成”;但在 Safari 中,它会提示“错误”和“已完成”,并且无法获取任何数据。

如果只是将 10 秒更改为 9 (sleep(9);),它也可以在 Safari 中使用。那么为什么 10 秒对于 Safari 来说是一个临界点呢?如何使 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: true在 ajax 属性中进行设置。10 秒可被视为超时。

于 2012-08-31T04:05:35.777 回答
0

谢谢,我认为这是 safari 中的一个错误,因为相同的代码在其他浏览器中运行良好,只有在存在 async:false 时才会在 safari 中中断

于 2013-05-28T09:39:29.510 回答