android - jquery ajax GET请求执行两次

标签 android jquery cordova jquery-mobile samsung-mobile

我有以下通过单击按钮执行的 ajax 请求:

<a href="javascript:test()"><img src="css/images/test.png"></a>

function test(){
    console.debug("*");

    $.ajax({
        type: "GET",
        dataType: "json",
        url: '/path/to/url',
        success: function(data){
            console.debug("**");
        }, 
        error: function(jqXHR, status, error){
            console.debug("*** " + status + " : " + error + " : " + jqXHR.status);
        },
        cache: false
    });
}

请求响应大约需要 30 秒才能返回。但是,从 apache 日志可以看出,服务器两次接收并执行请求。请求的时间戳相隔 30 秒,但请求是相同的(例如 ?_=1363692320782)。点击响应函数被调用一次,错误回调被调用一次(在初始请求后正好 60 秒),尽管 apache 响应是 200。

此问题已在 Samsung Galaxy S2,android 版本 2.3.5 的 phonegap 应用程序中重现。

更新 - 从下面的评论中添加 Apache 日志条目

1.2.3.4 - - [19/Mar/2013:14:07:59 +0000] "GET /pcapi/records/dropbox/08342hjg9gpqm7g/?_=1363702072225 HTTP/1.1" 200 11139 "-" "Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
1.2.3.4 - - [19/Mar/2013:14:08:29 +0000] "GET /pcapi/records/dropbox/08342hjg9gpqm7g/?_=1363702072225 HTTP/1.1" 200 11139 "-" "Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"

更新 - adb logcat

I/Web Console(16747): * at file:///android_asset/www/js/mobile.js:1769
I/Web Console(16747): *** error : : 0 at file:///android_asset/www/js/mobile.js:1779

更新 - TCP/IP 监视器

将请求通过 TCP/IP 监视器显示两个请求都发送了 200 响应。

最佳答案

我的应用在 Android 2.3.5 上运行时遇到了这个确切的问题。我只能得出结论,webview 在超时后重试了请求。我找不到影响超时持续时间的方法。

最后,我重写了代码,使初始请求在服务器上分离出一个异步进程并立即返回。然后,从页面上的 setTimer 中,我将检查服务器进程的状态(同样,立即返回)。当状态为“完成”时,页面将进入下一步。

我希望这会有所帮助。我当然理解你对此的不满。我自己花了几天时间与它作斗争。

编辑:这可能是这篇文章让我朝着异步解决方案的方向发展。我相信这里所说的问题是一样的:

XmlHttpRequest double posting issue in Android

关于android - jquery ajax GET请求执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499647/

相关文章:

java - 从内部存储读取和写入

php - Ajax /PHP : Returning values

javascript - 选择 - 仅在更改时获取先前值和新值

android - 文件 ://uri 上的 Cordova 3.4 resolveLocalFileSystemURI

android - 无法使用 ionic cli 1.3.2 添加人行横道

android - 如何从没有上下文的类中调用 getResources()?

java - 按 "run app"时出现 Gradle 错误 - Android Studio 0.4.3 [无法创建 Tooling API 实例]

javascript - 图像映射 + 带有 rwdImageMaps 的响应式选项卡

angularjs - 在 AngularJS 中使用蓝牙

java - 回去 Activity