0

在 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):第一次尝试10秒后同步请求超时,URL:... E/WebUrlLoaderClient(924):第2次尝试10秒后同步请求超时,URL:。 ..

记录第 3 行后,ajax 请求将就绪状态更改为 4,响应状态更改为 0 而不是 200,响应文本也为空。这意味着它在 30 秒后超时(3 次重试,每次 10 秒)。

我浏览了Android开源的WebUrlLoaderClient.cpp,发现超时和重试次数分别固定为10和3。

同样的请求在异步模式下工作正常。

请让我知道我是否在此代码中做错了什么,或者是否有任何其他方法可以执行响应时间超过 30 秒的同步 ajax 调用。

4

1 回答 1

0

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

请参阅此处:登录适用于 Iphone 但不适用于 android

于 2014-02-19T13:48:34.403 回答