我一直在开发一个手机应用程序,它使用jQuery Mobile作为它的主要结构。
当站点/应用程序运行时,它会执行许多ajax调用以获取应用程序的最新数据。例如,为主页收集项目列表,而为其他页面收集其他项目列表。
我发现的是,不时有数据混淆。
作为随机(但适用)示例:
查询1 - 获取人物的姓名和照片
查询2 - 获取城市/地点的名称和照片
在每个ajax调用中,我没有使用(data,status),而是将数据对象重命名为唯一标识符,希望这可以解决问题。
然后,在我的$ .each函数中,我确保迭代器也有一个不同的名称,所以代替(i,item)它可能是(i,personitem)和(i,cityitem)
问题
尽管我最好的尝试是让这些数据没有任何交叉的可能性,但我发现(与当前的例子一致) - 人们的照片将显示在城市页面上,以及城市的照片将显示在用户页面上。
这也是一个间歇性的问题。有时它根本不会发生,有时它会发生很多或只是一点点。
我希望我已经清楚地解释了自己。感谢先进的任何愿意帮助的人!我完全没有想法:-(
==================
更新
我的主要问题是,是否有人知道在此类查询中可能导致数据混淆的原因。
我的查询都是这样的:
$.ajax({
url: 'get_cities.php?country='+country,
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(citydata, status){
if(citydata.length == 0){
$('#somediv').append('no data to show');
}
$.each(citydata, function(i,cityitem){
var content = '<img src="'+cityitem.image+'" />'
+'<p>'+cityitem.name+'</p>';
$('#somediv').append(content);
}
});
答案 0 :(得分:0)
此时我相信@ mason81的建议是正确的。
我删除了所有的:
jsonp: 'jsoncallback',
在我的代码中,然后更新我的PHP文件以使用
echo $_GET['callback'] . '(' . json_encode($records) . ');';
而不是
echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
我原本也放了&amp; callback =?进入我的URL,但是从阅读jQuery Ajax文档开始,只要您使用dataType:jsonp而不手动指定回调参数,它就应该自动为每个调用分配一个随机的唯一回调。
如果此操作失败,我仍然会认为这是正确的答案,我可能只需要通过并为每个请求分配唯一的回调参数,或者使用&amp; callback修改我的网址=?如上所述。
感谢大家的投入!