我在#启动时通过 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) . ');';
?>
我很感谢每一个答案。