在从Andriod的webview中执行从javascript到跨域网站的同步ajax请求(GET)时,请求失败。 代码如下,
var jqxhr = $.ajax({
url: url,
cache: false,
dataType: 'json',
type: 'GET',
async: false
})
.done(function ( data ) { fnSuccess(JSON.stringify(data)); });
jqxhr.fail(function(jqXHR, textStatus, errorThrown) {
alert("Failed with:"+textStatus+"--"+errorThrown+"--"+jqXHR.status+"--"+jqXHR.responseText);
});
该网站应该以JSON格式返回数据,平均响应时间约为90秒。 网站网址如https://abc.com/abc/123?a=1&b=2&c=3
在Ajax请求启动时显示以下日志(adb logcat), E / WebUrlLoaderClient(924):第0次尝试后,同步请求在10秒后超时,URL:https://abc.com/abc/123?a=1&b=2&c=3 E / WebUrlLoaderClient(924):同步请求在第1次尝试10秒后超时,URL:... E / WebUrlLoaderClient(924):第2次尝试后,同步请求在10秒后超时,URL:...
记录第3行后,ajax请求将就绪状态更改为4,响应状态更改为0而不是200,响应文本也为空。这意味着它在30秒后超时(每次重试3次,每次10次)。
我从Android开源处浏览了WebUrlLoaderClient.cpp,发现超时和重试次数分别固定为10和3。
同样的请求在异步模式下工作正常。
请告诉我此代码中是否有任何错误,或者是否有其他方法可以执行同步ajax调用,其中响应时间超过30秒。
答案 0 :(得分:0)
我担心您无法为同步ajax调用设置自定义超时...您必须异步并将您的下一个放入.done和.fail ajax调用。