0

我对 PHP 页面上的 iDangerous swiper 有一个奇怪的问题...我目前正在对我公司使用的触摸屏信息亭进行一些更新(最大的变化是从 MySQL 数据库迁移到 SQL Azure 云数据库)。它现在用于将纯文本数据从 SQL 加载到相对较小的数据库中的单个 swiper 幻灯片中。There are different selectable categories with varying result set sizes, and smaller ones seem to work just fine, but when larger categories are selected, there seems to be some sort of timing issue or something and the entire swiper container either disappears or just totally fails to加载。我们拥有的最大结果集大约有 75 条记录左右,从直接查询中实际加载并不需要任何时间,所以我不知道发生了什么。目前,iDangerous swiper 超时设置为 1000 毫秒,如果我将该数字增加到 5000 毫秒,它可以解决问题。问题是,每次选择不同的类别来加载基本文本结果时,用户端都必须等待 5 秒钟,这真的很糟糕。除了限制结果集(会破坏目的,所以这不是一个真正的选择)或使超时无法使用之外,我们可以采取哪些方法来解决这个问题?我在查询原始数据库(当时在 localhost 上运行)时没有遇到这个问题,所以我猜它可能与 SQL Azure 到 PHP 的连接有关?每次选择不同的类别来加载基本文本结果时,用户端都必须等待 5 秒钟,这真的很糟糕。除了限制结果集(会破坏目的,所以这不是一个真正的选择)或使超时无法使用之外,我们可以采取哪些方法来解决这个问题?我在查询原始数据库(当时在 localhost 上运行)时没有遇到这个问题,所以我猜它可能与 SQL Azure 到 PHP 的连接有关?每次选择不同的类别来加载基本文本结果时,用户端都必须等待 5 秒钟,这真的很糟糕。除了限制结果集(会破坏目的,所以这不是一个真正的选择)或使超时无法使用之外,我们可以采取哪些方法来解决这个问题?我在查询原始数据库(当时在 localhost 上运行)时没有遇到这个问题,所以我猜它可能与 SQL Azure 到 PHP 的连接有关?

function getInventors(cat,text) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("content").innerHTML = xmlhttp.responseText;
    }
}

xmlhttp.open("GET", "getBrowse.php?CAT="+cat+"&TEXT="+text, true);
xmlhttp.send();

setTimeout(function() {
var mySwiper2 = new Swiper('.swiper-container',{
centeredSlides: true,
autoplay: 7000,
slidesPerView: 'auto',
watchActiveIndex: true,
onTouchMove: function(swiper){
mySwiper2.startAutoplay();
}
}) }, 1000 /*changing this to a much higher number fixes it)*/;
}

提前感谢您的建议!

4

1 回答 1

0

我想通了,刷卡器被初始化在错误的地方。它应该在 Ajax 函数本身内部初始化,而不是像这样在外部初始化。

function getInventors(cat,text) {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("content").innerHTML = xmlhttp.responseText;

var mySwiper2 = new Swiper('.swiper-container',{
    centeredSlides: true,
    autoplay: 7000,
    slidesPerView: 'auto',
    watchActiveIndex: true,
    onTouchMove: function(swiper){
        mySwiper2.startAutoplay();
    }
});

}
}

它现在可以工作了:)

于 2015-04-23T14:03:50.780 回答