sea*_*anl 4 safari ajax jquery post get
我正在使用 jQuery ajax() 方法将 (GET) 数据传递到另一个 ExportData 页面,并在该页面处理后获取返回的数据(“成功/失败”)。ExportData 页面需要大约 10 秒才能返回“成功/失败”。
我使用的代码在其他浏览器(FF/IE/Chrome)中运行良好,但不适用于 Safari。在 Safari 的代码检查器中,状态代码显示为 -1001 并且未收到任何数据。虽然还有其他 ajax() 请求(只要此页面返回数据就不需要)并且它们确实有效(状态为 200)。
我猜测发送和接收数据之间的长时间间隔会导致 Safari 出错。但是我也发现 -1001 错误显示得非常快,这可能意味着未执行 ExportData.php。
有没有人对这个问题有想法?对你的帮助表示感谢!
代码是:
ExportData: function (date,view) {
ajaxcall.data = {};
ajaxcall.url = 'ExportData.php?Date='+date+'&View='+view;
ajaxcall.callbackfunction = UserEvents.ExportSuccess;
ajaxcall.Call();
},
Run Code Online (Sandbox Code Playgroud)
“ajaxcall”在另一个文件中:
var ajaxcall = {
SitePath: '',
data: '',
url: '',
callbackfunction: '',
fileElementClass: '',
AjaxRequest: false,
callback: true,
Call: function () {
if (ajaxcall.AjaxRequest == true) {
alert(ajaxcall.AjaxRequest);
return;
}
else {
try {
ajaxcall.AjaxRequest == true;
$.ajax({
type: "GET",
url: ajaxcall.url,
data: ajaxcall.data,
dataType: "json",
async: false,
success: function (data) {
if (ajaxcall.callback == true) {
ajaxcall.callbackfunction(data);
}
},
error: function (request, status, error) {},
complete: function () {
ajaxcall.AjaxRequest = false;
}
});
}
catch (e) {
ajaxcall.AjaxRequest == false;
}
}
},
};
Run Code Online (Sandbox Code Playgroud)
谢谢,肖恩刘
这是一个老问题,我不确定您是否找到了答案,但我们最近遇到了同样的问题。经过大量的研究和测试,我们发现 Safari 忽略了同步 AJAX 调用的超时设置,限制为 10 秒。我想这被认为是用户体验的事情,因为同步调用会使页面看起来挂起,他们可能会认为长时间这样做不是用户友好的,或者是一个没有响应的页面。
所以你基本上有两个选择,你可以修改你的代码以使用输出缓冲区来定期发回数据。这应该会触发 Safari 识别该请求至少处于活动状态并做出响应,并且通常不会强制它超时。我们从未尝试过这个,所以我不能保证它,但我在这里和那里看到了一些不同的成功故事。另一种选择是将 AJAX 调用更改为异步调用。这可能是更简单的方法,但如果您的应用程序依赖于同步调用,您可能需要实现一些承诺来“模拟”同步响应。
作为参考,我们从这里开始追踪问题:http : //propercode.com/wordpress/?p=32。
归档时间: |
|
查看次数: |
11084 次 |
最近记录: |