【发布时间】:2013-03-08 03:16:48
【问题描述】:
我有以下通过单击按钮执行的 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 响应。
【问题讨论】:
-
浏览器日志呢,发生了多少请求?
-
@Gajotres 这不会发生在桌面浏览器中,当在 weire 中运行时,您只会看到一个请求。
-
您是否可以轻松地模仿我的猜测并增加或减少服务器返回显着长于或短于 30 秒的时间?我很好奇你是否还会看到你得到的 30 秒超时。我问是因为 30 秒是各种事情的相当常见的默认超时值......
-
@MattGibson 当服务器调用少于 30 秒时,调用只进行一次并返回成功,如果响应大于 30 秒,则重新发送请求并且 ajax 调用返回错误.
-
您能显示为按钮注册“click”事件处理程序的代码吗?你确定没有在phonegap上注册两次吗?
标签: android jquery cordova jquery-mobile samsung-mobile