我通过ajax(使用JQuery)提交表单,收到响应所需的时间可以是几秒钟到几分钟。这是预期的,不能改变。这在所有浏览器中工作正常,除了在120秒后超时我的请求的股票Android浏览器,无论我在ajax构造函数中设置超时。有办法解决这个问题吗?
Ajax请求的代码非常简单:
var jqxhr = $.ajax({
type: 'post',
timeout: 500000,
url: 'process.php',
data: $('form').serialize(),
success: function (data) {
alert("success" + data);
},
error: function(xhr, error){
alert("Error: " + error + ", XHR status: " + xhr.status);
},
});
在Android上使用超过120秒的脚本提交时,将使用以下消息命中错误处理程序:
Error: error, XHR status: 0
答案 0 :(得分:2)
请查看此article,表明错误可能是由于存在HTTP Expires标头而引起的。
使用Fiddler之类的工具来监控HTTP网络流量并显示结果以供进一步分析。
您遇到语法错误。
var jqxhr = $.ajax({
type: 'post',
timeout: 500000,
url: 'process.php',
data: $('form').serialize(),
success: function (data) {
alert("success" + data"); <------- HERE
},
error: function(xhr, error){
alert("Error: " + error + ", XHR status: " + xhr.status);
},
});
使用此在线JavaScript runner尝试使用您的代码,但请删除额外的双重qoute。
var jqxhr = $.ajax({
type: 'post',
timeout: 500000,
url: 'process.php',
data: $('form').serialize(),
success: function (data) {
alert("success" + data);
},
error: function(xhr, error){
alert("Error: " + error + ", XHR status: " + xhr.status);
},
});
答案 1 :(得分:0)
经过一些研究后,似乎其他人在〜60ms和~120ms时遇到类似的AJAX超时问题。这些似乎是非常谨慎的价值观(如内部浏览器设置),我将继续并假设缺乏响应/解决方案,我们无法绕过这些超时。
您是否考虑将您的AJAX请求发布到不执行任何处理的单独服务器/服务,并且可以返回快速200 OK响应。然后让第二个服务器处理与慢速服务器的通信。我知道这很糟糕,但它可能是你唯一的解决方案(可能会导致应用程序越来越快,用户越来越开心)。
您能否更深入地了解您的应用?这是一个PhoneGap应用程序,还是您可以从浏览器访问的某个域托管的应用程序?你能提供一个URL吗?
答案 2 :(得分:0)
答案 3 :(得分:0)
尝试在单独的空白html页面上插入您的代码,除了您的ajax请求,附加jquery和一些基本警报,如成功,状态代码或错误等。将正确的文件路径放在url处理程序中,在数据处理程序中,放一些静态值,如name:"Macros",site:"stackoverflow"
。当一切准备就绪后,您应该在桌面浏览器上收到警报消息,如果成功,请尝试在库存android浏览器上运行该html页面。如果这也有效..问题可能是jquery与其他脚本或$("form#testform").serialize()
函数冲突。
答案 4 :(得分:-1)
超时后重试怎么样?
$("form#testform").submit(function(){
var allFormValues = $("form#testform").serialize();
$.ajax({
cache:false,
timeout:8000, // I chose 8 secs for kicks
tryCount : 0,
retryLimit : 5,
type:"POST",
url:"someurl.php",
data:allFormValues,
error:function(xhr, status, error) {
if (status == 'timeout') {
this.tryCount++;
if (this.tryCount <= this.retryLimit) {
alert("Timeout! Retrying now!");
//try again
$.ajax(this);
return;
}
return;
} else {
// not a timeout? not a problem
alert("Error: " + status + ", XHR status: " + xhr.status);
}
},
success:function(response){
alert(response);
}
});
});