3G上的JSON AJAX连接障碍(purgeIdleCellConnections:找到一个清除conn)

时间:2013-07-15 17:16:43

标签: jquery ios ajax jquery-mobile cordova

我在#启动时通过 AJAX * * *从我的服务器请求 JSONP 来构建一个列出一些项目的应用程序site1。 如果您点击项目(DIV),它将引导您到#sitedetails。 在“sitedetails”上,基本细节和点击项目的描述将加载AJAX jsonp(它是唯一的文本)。

如果我在带有WIFI的测试设备上试用它,我的jQuery-Mobile PhoneGap应用程序工作正常,只要我使用 3G 就可以解决连接问题。有时“sitedetails”需要很长时间才能发出请求(2-5秒)。通常需要不到1秒,因为它只有几kb。因为我在JSONP req上设置了超时。 5秒,它经常显示我的功能的错误信息。

当发生这些错误时,我会导航回site1并再次点击一个项目,它会起作用。

在XCode中,它会在遇到此问题时显示此消息:

purgeIdleCellConnections: found one to purge conn = 0x1f078460
purgeIdleCellConnections: found one to purge conn = 0x1e591fd0
purgeIdleCellConnections: found one to purge conn = 0x1e591fd0

虽然 3G 连接速度快且稳定。它不能是服务器,在WIFI上它立即响应并在“sitedetails”上显示描述。

现在已经厌倦了:我发现只有在我点击一个项目后等待太久才会发生这种情况。我需要导航回“site1”并尽可能快地点击另一个项目,然后再次,再一次......并且不会出现连接问题。但由于这对用户来说不切实际,因此无法帮助我。

现在源代码:

var itemid;

$(document).on('pageinit', '#site1', function(){
var output = $('#items');
$.ajax({
url: 'http://************.com/api/files/json/mydata.php',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(data, status){
$.each(data, function(i,item){

var allitems =
"<div id='con' data-id="+item.id+">"+
"<div id='name'><b>"+item.name+"</b></div>"+
"<div id='date'><b>"+item.date+"</b></div>"+
"</div>";

output.append(allitems);

});

},
error: function(){
output.text('ERROR - Could not load data.')
}
});
});

点击事件:

$(document).on('tap', '#con', function(event) {
itemid = $(this).attr('data-id');
$.mobile.changePage('#sitedetails');
});

问题区域:

$(document).on('pagebeforeshow', '#sitedetails', function(){
var output = $('#itemdetails');
$.ajax({
url: 'http://************.com/api/files/json/mydatadetails.php?itemid='+itemid,
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 4000,
success: function(data, status){
$.each(data, function(i,item){
 var itemdetails =
"<div id='name'><b>"+item.name+"</b></div>"+
"<div id='date'><b>"+item.date+"</b></div>"+
"<div id='date'><b>"+item.details1+"</b></div>"+
"<div id='date'><b>"+item.details2+"</b></div>";

output.empty().append(itemdetails);
});
},
error: function(){
output.text('ERROR - Could not load data.')
} 
});
});

基本上就是这样,除了只有DIV的2页 (site1:#items,sitedetails:#itemdetails)。

我在iOS 6.1上使用XCode 4.6,PhoneGap 2.9,JQuery 1.9,JQM 1.3.1

编辑:我忘记了服务器上的mydatadetails.php:

<?php
header('Content-type: application/json');

$server = "*******.com";
$user = "***********";
$pw = "***********";
$db = "***********";

$itemid = $_GET["itemid"];

$connection = mysql_connect($server, $user, $pw) or die ("Could not connect: " . mysql_error());
mysql_select_db($db, $connection);

$sql = "SELECT id, name, date, details1, details2 WHERE id='".$itemid."'";

$result = mysql_query($sql) or die ("Query error: " . mysql_error());

$records = array();

while($row = mysql_fetch_assoc($result)) {
    $records[] = $row;
}

mysql_close($connection);

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
?>

我很感谢每一个答案。

0 个答案:

没有答案