webview中的同步Ajax超时

时间:2013-09-12 10:56:57

标签: javascript android jquery ajax webview

在从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秒。

1 个答案:

答案 0 :(得分:0)

我担心您无法为同步ajax调用设置自定义超时...您必须异步并将您的下一个放入.done和.fail ajax调用。

见这里:Login working for Iphone but not android

相关问题