Javascript 为什么ajax';获取';请求挂起iOS phonegap应用程序?
MyPhoneGap应用程序包括一个javascript工作流,用于填充web数据库(sqlite)。工作流由一系列同步执行的ajax“GET”请求组成(单个ajax请求是异步的,但是一个请求在前一个请求完成之前不会启动) 我观察到一个请求会断断续续地无限期地挂起(既不成功也不失败)。当我对ajax请求设置超时时,请求将超时。执行此操作时,Javascript 为什么ajax';获取';请求挂起iOS phonegap应用程序?,javascript,ios,ajax,cordova,xmlhttprequest,Javascript,Ios,Ajax,Cordova,Xmlhttprequest,MyPhoneGap应用程序包括一个javascript工作流,用于填充web数据库(sqlite)。工作流由一系列同步执行的ajax“GET”请求组成(单个ajax请求是异步的,但是一个请求在前一个请求完成之前不会启动) 我观察到一个请求会断断续续地无限期地挂起(既不成功也不失败)。当我对ajax请求设置超时时,请求将超时。执行此操作时,XmlHttpRequest具有以下状态: status: 0 readyState: 0 statusText: 'timeout' 让我印象深刻的是,如
XmlHttpRequest
具有以下状态:
status: 0
readyState: 0
statusText: 'timeout'
让我印象深刻的是,如果我设置一个代理并通过fiddler观察网络流量,我会在60秒的超时时间内看到发出的请求和服务器返回的预期响应
更新:如果我通过监控开发人员iPad的网络流量,我会发现请求似乎没有得到响应。因此,似乎响应要么没有响应,要么被设备忽略
我无法在运行android的nexus 7或在我的工作站上运行chrome的nexus 7上重现此错误,这使我相信此问题特定于iOS(版本6.1.3)
以下是适用代码的简化示例:
function syncWebDatabase() {
var sqlScript;
return retrieveEntity('users', sqlScript )
.then(function () {
return retrieveEntity('accounts', sqlScript );
})
.then(function () {
return retrieveEntity('orders', sqlScript );
})
.then(function () {
return retrieveEntity('shipments', sqlScript );
})
.then(function () {
return executeScript(sqlScript);
});
}
function retrieveEntity(entityName, sqlScript) {
return $.ajax({
url: 'http://myrestfulservice/' + entityName,
type: 'GET',
dataType: 'json',
timeout: 60000,
error: function(jqXHR, textStatus, errorThrown) {
//handle error condition
}
}).then(function (entites) {
return generateInsertStatements(entities, sqlScript);
})
}
function generateInsertStatements(entities, sqlScript) {
//appends insert statement for each entity to sqlscript
}
function executeScript(sqlScript) {
//executes sql script against web database
}
我希望您能解释我所观察到的情况,以及我的问题的解决方案,或者就如何进一步调查该问题发表意见。可能相关:听起来很傻,但您是否已将该网站添加到白名单中?ajax GET参数的长度是多少?它不应超过8000个符号。