多个 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 调用导致混合数据集的主要内容,如果未能解决你的问题,请参考以下文章

vue.js 单组件集数据

r语言如何输出数据集过长,导致输出截断,怎么解决这个问题

[VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”

数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集

决策树如果数据集不够多,会导致分类准确率低吗

将数据集与 plotly 进行比较 - 用实线混合虚线