jQuery Ajax $.parseJSON 适用于本地主机但不适用于服务器
jQuery Ajax $.parseJSON works on Localhost but not on server
大家好,在此先感谢您的帮助。
我有一个无限滚动脚本,我已经开发并在本地主机上工作,但不在我的服务器上。
JS 代码如下所示:
$('#load-more').on('mouseenter', function() {
$(this).css('cursor', 'pointer');
}).on('click', function slide(event) {
var relData = $.parseJSON($(this).attr('rel'));
$('#loader').html('<img src="design/loader.gif" alt="" />');
var data = {
displayedSites: relData.displayedSites,
catNum: relData.catNum,
streamPage: relData.streamPage,
numSites: relData.numSites
};
$.ajax({
type: 'POST',
url: 'ajax/infinite-scroll.php',
data: data,
dataType: 'json',
timeout: 3000,
success: function(data) {
$('#sitesstream').fadeOut(100, function() {
$(this).append(data.newSitesSet);
}).fadeIn(1000);
$('#loader').html('');
if (data.moreSitesRel.active != 'off') {
$('#load-more').show();
$('#load-more').attr('rel', '{"displayedSites":"' + data.moreSitesRel.displayedSites + '", "catNum":"' + data.moreSitesRel.catNum + '", "streamPage":"' + data.moreSitesRel.streamPage + '", "numSites":"' + data.moreSitesRel.numSites + '"}');
} else {
$('#load-more').hide();
}
},
error: function() {
$('#siteStreamInfo').text('Problem');
}
});
return false;
});
它调用 PHP 文件来添加更多内容并发送回页面。
您是否知道缺少什么或我应该添加/更改什么以使其在我的服务器上运行,这是一个 >7 php 版本。
我也用jQuery版本3.5.1
非常感谢。
作为基本 rule-of-thumb,从不 手动制作您自己的 JSON 字符串。
您可能 运行 返回的数据中的某些内容使您的 JSON 在您将其设置回 rel
属性时无效。
而是使用 JSON.stringify()
$("#load-more").attr("rel", JSON.stringify({
displayedSites: data.moreSitesRel.displayedSites,
catNum: data.moreSitesRel.catNum,
streamPage: data.moreSitesRel.streamPage,
numSites: data.moreSitesRel.numSites
}));
仅供参考,您的 mouseenter
处理程序会比实际的 CSS
简单得多
#load-more { cursor: pointer; }
您甚至不需要 :hover
,因为 cursor
规则仅适用于 mouse-over。
谢谢菲尔的帮助。
我已经删除了光标的东西并把它放在我的 CSS :)
我终于解决了我的问题,这不是 jQuery JSON 问题,而是对 infinite-scroll.php 文件的 PDO 查询。
这很奇怪。
查询是:
$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$page['catNum'].' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT :start, :perpage';
$res_sites = $bdd->prepare($sitesQuery);
$res_sites->bindValue(':start', 0, PDO::PARAM_INT);
$res_sites->bindValue(':perpage', 60, PDO::PARAM_INT);
$res_sites->execute();
$res_sites->setFetchMode(PDO::FETCH_OBJ);
我替换为:
$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$catNum.' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT '.$start.', '.$displayedSites.'';
$res_sites = $bdd->prepare($sitesQuery);
$res_sites->execute();
$res_sites->setFetchMode(PDO::FETCH_OBJ);
由于我不知道的原因,我放弃了 bindValue 东西,这是问题的根源!因为我在某些页面上使用了相同的查询并且它工作正常...
如果有人有解释...
无论如何,再次感谢您的帮助。
大家好,在此先感谢您的帮助。
我有一个无限滚动脚本,我已经开发并在本地主机上工作,但不在我的服务器上。
JS 代码如下所示:
$('#load-more').on('mouseenter', function() {
$(this).css('cursor', 'pointer');
}).on('click', function slide(event) {
var relData = $.parseJSON($(this).attr('rel'));
$('#loader').html('<img src="design/loader.gif" alt="" />');
var data = {
displayedSites: relData.displayedSites,
catNum: relData.catNum,
streamPage: relData.streamPage,
numSites: relData.numSites
};
$.ajax({
type: 'POST',
url: 'ajax/infinite-scroll.php',
data: data,
dataType: 'json',
timeout: 3000,
success: function(data) {
$('#sitesstream').fadeOut(100, function() {
$(this).append(data.newSitesSet);
}).fadeIn(1000);
$('#loader').html('');
if (data.moreSitesRel.active != 'off') {
$('#load-more').show();
$('#load-more').attr('rel', '{"displayedSites":"' + data.moreSitesRel.displayedSites + '", "catNum":"' + data.moreSitesRel.catNum + '", "streamPage":"' + data.moreSitesRel.streamPage + '", "numSites":"' + data.moreSitesRel.numSites + '"}');
} else {
$('#load-more').hide();
}
},
error: function() {
$('#siteStreamInfo').text('Problem');
}
});
return false;
});
它调用 PHP 文件来添加更多内容并发送回页面。
您是否知道缺少什么或我应该添加/更改什么以使其在我的服务器上运行,这是一个 >7 php 版本。 我也用jQuery版本3.5.1
非常感谢。
作为基本 rule-of-thumb,从不 手动制作您自己的 JSON 字符串。
您可能 运行 返回的数据中的某些内容使您的 JSON 在您将其设置回 rel
属性时无效。
而是使用 JSON.stringify()
$("#load-more").attr("rel", JSON.stringify({
displayedSites: data.moreSitesRel.displayedSites,
catNum: data.moreSitesRel.catNum,
streamPage: data.moreSitesRel.streamPage,
numSites: data.moreSitesRel.numSites
}));
仅供参考,您的 mouseenter
处理程序会比实际的 CSS
#load-more { cursor: pointer; }
您甚至不需要 :hover
,因为 cursor
规则仅适用于 mouse-over。
谢谢菲尔的帮助。 我已经删除了光标的东西并把它放在我的 CSS :)
我终于解决了我的问题,这不是 jQuery JSON 问题,而是对 infinite-scroll.php 文件的 PDO 查询。
这很奇怪。
查询是:
$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$page['catNum'].' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT :start, :perpage';
$res_sites = $bdd->prepare($sitesQuery);
$res_sites->bindValue(':start', 0, PDO::PARAM_INT);
$res_sites->bindValue(':perpage', 60, PDO::PARAM_INT);
$res_sites->execute();
$res_sites->setFetchMode(PDO::FETCH_OBJ);
我替换为:
$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$catNum.' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT '.$start.', '.$displayedSites.'';
$res_sites = $bdd->prepare($sitesQuery);
$res_sites->execute();
$res_sites->setFetchMode(PDO::FETCH_OBJ);
由于我不知道的原因,我放弃了 bindValue 东西,这是问题的根源!因为我在某些页面上使用了相同的查询并且它工作正常...
如果有人有解释...
无论如何,再次感谢您的帮助。