0

我正在向通用处理程序发出 ajax 请求,该处理程序Handler.ashx将此请求转发到另一个域中的 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

4

3 回答 3

1

尝试将async参数设置为true

$.ajax({
    url: 'Handler.ashx',
    type: 'GET',
    async: true,
});
于 2013-05-02T12:36:32.563 回答
1

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

于 2013-11-05T16:11:47.897 回答
0

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

于 2020-06-15T18:33:18.890 回答