多个 ajax 调用导致混合数据集
Posted
技术标签:
【中文标题】多个 ajax 调用导致混合数据集【英文标题】:multiple ajax calls is causing mixed datasets 【发布时间】:2016-04-17 04:48:43 【问题描述】:我一直在开发一个使用 jQuery Mobile 作为主要结构的 phonegap 应用程序。
当站点/应用程序运行时,它会执行许多 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);
);
【问题讨论】:
你需要显示你的代码 - 我们无法猜测问题是什么 我添加了一个更新,其中包含我使用的实际查询。我所有的 ajax 请求或多或少都是相同的格式。我的问题很简单,您是否知道任何可能导致多个 ajax 请求相互交叉数据的事情? 只是为了确认一下,您为不同的 ajax 调用使用了正确的 url,对吧? 另外,您是否为您的 jasonp 回调使用不同的名称? 是的 100%。每个呼叫都与另一个非常不同。这个问题可能有五分之四不会发生。通常每第四或第五次重新加载它会随机开始混合信息。请注意,在我的实现中,有很多在应用程序加载时运行的 ajax 调用。但它们都引用了正确的 url、正确的参数,并且具有唯一的对象名称和迭代器 【参考方案1】:在这一点上,我相信@mason81 的建议是正确的。
我删除了所有的:
jsonp: 'jsoncallback',
在我的代码中,然后更新我的 PHP 文件以使用
echo $_GET['callback'] . '(' . json_encode($records) . ');';
而不是
echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
我原来也放了&callback=?进入我的 URL,但通过阅读 jQuery Ajax 文档,只要您使用 dataType: jsonp 而不手动指定回调参数,它应该自动为每个调用分配一个随机唯一的回调。
如果这失败了,我仍然会认为这是正确的答案,我可能只需要通过并为每个请求分配唯一的回调参数或使用 &callback= 修改我的 URL?如上所述。
感谢大家的意见!
【讨论】:
你不需要使用jsonp 问题根本不在于 json 请求!哈!我的坏..尽管我发现反馈非常有帮助,但仍然如此,感谢社区! :-)以上是关于多个 ajax 调用导致混合数据集的主要内容,如果未能解决你的问题,请参考以下文章
[VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”