【问题标题】:Safari browser ajax request errorSafari浏览器ajax请求错误
【发布时间】:2013-05-02 12:34:03
【问题描述】:

我正在向通用处理程序Handler.ashx 发出 ajax 请求,该处理程序将此请求转发到另一个域中的 REST 服务。 Handler用于实现跨域调用。 我在 Firefox 和 Chrome 中获取数据。但不是在 Windows 7 上的 Safari(版本 5.1.7)中

$.ajax({
         url: 'Handler.ashx',
         type: 'GET',
         contentType: 'application/json; charset=utf-8',
         dataType: 'json',
         async: false,
         timeout: 20000,
         data: data,
         success: function (received_data) {
             // Process data
         },
         error: function (err) {
             console.log(err);
         }
});

我的Handler.ashx 代码:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri("http://xxx.xxx.xx.xxx/MyWebService/Service.svc/DownloadFile"));
    req.ContentType = "application/json; charset=utf-8";
    req.Timeout = 60000;

    using (WebResponse resp = req.GetResponse()) 
    { 
        StreamReader reader = new StreamReader(resp.GetResponseStream());
        string responceFromService = reader.ReadToEnd();
        context.Response.ContentType = "application/json; charset=utf-8";
        context.Response.Write(responceFromService);
    }

我得到的错误是:

NETWORK_ERR: XMLHttpRequest Exception 101

【问题讨论】:

标签: jquery html ajax cross-domain


【解决方案1】:

根据我在网上浏览的所有内容以及我自己的测试,Safari 会在 10 秒后超时同步 ajax 调用。而且,没有办法绕过它。 (我试过了。)这不是一个错误。这只是 Apple 向您暗示的方式,如果您的呼叫不能在 10 秒内可靠地返回,您不应该使用同步呼叫。事实上,您可能永远不应该使用同步调用,因为无法知道您的调用是否会在 10 秒内返回。您需要重构您的代码,以便在 ajax 调用之后发生任何事情,通过回调例程发生,而不是内联。

【讨论】:

    【解决方案2】:

    尝试将async参数设置为true

    $.ajax({
        url: 'Handler.ashx',
        type: 'GET',
        async: true,
    });
    

    【讨论】:

    • 问题是在我得到数据并处理它之前我不能走得更远。我在这些数据的帮助下构建块。
    • 所以只需通过调用完整回调函数中的相关函数来编写您的逻辑,没有合理的理由使用 ajax async false,我不知道。
    • @A. Wolff:我也遇到了同样的问题,我的 ajax 调用在除 safari 之外的所有浏览器中都有效。你能解释一下到底是什么问题吗?
    【解决方案3】:

    我的 ajax 调用仅在 Safari 中失败。对我有用的是使用event.preventDefault()防止默认按钮点击行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 2018-02-22
      • 2011-10-28
      • 2010-09-17
      • 2012-05-10
      • 2012-05-29
      • 1970-01-01
      相关资源
      最近更新 更多