现在搜索了几个小时,很遗憾,我找不到当前iOS Safari问题的解决方案。
我有一个JavaScript前端,它使用jQuery.ajax与ASP.NET MVC Web服务器进行通信。
这在所有平台上都绝对完美,例如Windows 10配备Chrome,Firefox,IE(是,IE可以运行),Edge。或在装有Chrome,Firefox,Safari的Mac上。 不起作用的地方是iOS Safari。
在我的场景中,我几乎同时将多个AJAX请求发送到服务器。也许3到最多6个通话。查看Safari开发人员工具后,调用如下所示。
它们似乎花费很长时间,但是看看服务器,它们似乎永远无法到达后端。同样,恰好在10分钟后,浏览器也会进入超时状态。即使我将AJAX超时配置为60秒。
目前,我的代码对我来说还算不错(用TypeScript编写):
let defer: JQueryDeferred<any> = jQuery.Deferred();
this._RunningRequests++;
let settings: JQueryAjaxSettings = {
method: method,
url: this.BuildURL(controller, action, id),
contentType: 'application/json',
timeout: Timeout,
cache: false,
headers: {}
};
if (payload) {
settings.data = JSON.stringify(payload);
}
jQuery.ajax(settings)
.done((result: any) => {
if (this.DetectLogoutRedirect(result)) {
defer.reject();
location.reload(true);
return;
}
defer.resolve(result);
})
.fail((jqXHR: JQueryXHR, textStatus: string, errorThrown: string) => {
defer.reject();
this.HandleError(method, controller, action, jqXHR, textStatus, errorThrown);
}).always(() => {
this._RunningRequests--;
});
return defer.promise();
现在这是有趣的部分。我在通话中添加了延迟...
let delay = this._RunningRequests * 500;
setTimeout(() => { jQuery.ajax(...) }, delay);
...可确保彼此之间不会很快发送呼叫,效果很好。
到目前为止,我已经尝试过并发现的东西:
我该如何解决?