jquery ajax GET请求执行两次

gmh*_*h04 17 jquery android jquery-mobile samsung-mobile cordova

我有以下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
    });
}
Run Code Online (Sandbox Code Playgroud)

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

这个问题已经在三星Galaxy S2,Android 2.3.5版本的手机应用程序中重现.

更新 - 从下面的评论中添加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"
Run Code Online (Sandbox Code Playgroud)

更新 - 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
Run Code Online (Sandbox Code Playgroud)

更新 - TCP/IP监视器

通过TCP/IP监视器发出请求会显示两个请求都以200响应发送.

Mig*_*l-F 6

如果此处定义的URL路径url: '/path/to/url'是针对文件夹而不是特定文件,请尝试添加这样的尾部斜杠url: '/path/to/url/'.

如果未指定文件,则会发生Apache Web服务器使用新URL(带有斜杠)向AJAX客户端发送301重定向,因此客户端会向正确的URL发出新请求.

看到这里发布的类似问题:jQuery $ .ajax()执行了两次?

请参阅此处的Apache doc参考:http://httpd.apache.org/docs/2.0/mod/mod_dir.html#directoryslash


Chu*_*ohr 6

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

最后,我重写了代码,使得初始请求在服务器上分离出异步进程并立即返回.然后,从页面上的setTimer,我将检查服务器进程的状态(再次,立即返回).当状态为"完成"时,页面将继续进行下一步.

我希望有所帮助.我当然明白你对此感到沮丧.我花了几天时间与它斗争.

编辑:这可能是发送给我异步解决方案的文章.我相信这里陈述的问题是同一个问题:

Android中的XmlHttpRequest双重发布问题