【发布时间】:2016-04-01 16:32:22
【问题描述】:
如果用户滚动到几乎底部,则应在 ajax 请求的帮助下加载更多内容。此 ajax 请求获取一些数据(作为 json 对象形式的字符串 - 所以它不是 json 对象,而只需解析为一个)。此外,我实际上使用了一个插件(JSON2HTML),它在模板迭代一个 json 对象后生成 html。
JSON(在 ajax 之前):
var template = {"tag":"div","class":"parent","children":[
{"tag":"div","class":"tablee","style":"cursor:/*pointer*/;","children":[
{"tag":"table","class":"post","children":[
{"tag":"tbody","children":[
{"tag":"tr","children":[
{"tag":"td","class":"postby","children":[
{"tag":"img","class":"postppic","src":"propic\/${profilepic}","html":""}
]},
{"tag":"td","class":"postcontent","children":[
{"tag":"p","class":"postusername","children":[
{"tag":"a","class":"poster","href":"${username}-profile.php","html":"${username}"},
{"tag":"br/"},
{"tag":"span","class":"caption","html":"${caption}"}
]}
]},
...
var data = [
{
"username":"momo",
"profilepic": "momo_1.jpg",
"caption":"",
"likes": "0",
},
{
"username":"momo",
"profilepic": "momo_1.jpg",
"caption":"",
"likes": "0",
},
...
];
var str = json2html.transform(data,template);
$("#rein").append(str);
现在,如果用户向下滚动,将加载更多内容,像 json 对象一样形成的字符串现在由 php 回显,我们在文档中已有的帖子数量被发送到(所以我们不会得到相同的帖子再次...)。
jQuery(接近底部时的ajax请求):
$(document).ready(function () {
function loadMore()
{
var accountpar = $(".parent").length;
$("h1").text(accountpar);
$.ajax({
url: 'homemore.php',
type: 'post',
data: {
'account':accountpar
},
success: function(json) {
var str = json2html.transform(json,template);
$(str).insertAfter($('[class="parent"]').last());
$("#rein").append();
homejs();
}
});
$(window).bind('scroll', bindScroll);
}
function bindScroll(){
if($(window).scrollTop() + $(window).height() > $(document).height() - 75) {
$(window).unbind('scroll');
loadMore();
}
}
$(window).scroll(bindScroll);
});
直到成功并且应该接收数据之前,它都可以正常工作。 (homejs() 是在 document.ready 之后加载的 jquery 函数,因此第一个 jquery 写入文档中。)这个数据看起来像这样(根据我的 google chrome 浏览器):
var data = [
{
"username":"momo",
"profilepic": "momo_1.jpg",
"caption":"",
"likes": "0",
},
{
"username":"momo",
"profilepic": "momo_1.jpg",
"caption":"",
"likes": "0",
},
...
];
所以收到了一些东西但无法解析?因为这就是控制台日志所说的(它是这样称呼的吗?就像你可以看到所有错误的地方......):
VM5454:2 Uncaught SyntaxError: Unexpected token v
json2html.transform@json2html.js:33
//Normalize strings to JSON objects if necessary
var obj = typeof json === 'string' ? JSON.parse(json) : json; //line 33
$.ajax.success@home.php:423
var str = json2html.transform(datanew,template); //line 423
j@jquery-1.11.3.min.js:2
k.fireWith@jquery-1.11.3.min.js:2
x@jquery-1.11.3.min.js:5
b@jquery-1.11.3.min.js:5
那么你们中的任何人都可以弄清楚为什么它不起作用吗?我希望我提供了足够的信息...请帮助:']
【问题讨论】:
-
如果有任何错误,请查看开发控制台或添加错误回调以捕获错误。
-
你能写一个关于如何做到这一点的答案吗?我对 jQuery 很陌生,并试图提供尽可能多的信息......对不起,如果这是一个愚蠢的问题......@Matt.k
-
您可以在 Ajax 调用中使用 .fail()。在这个 jQuery 页面上,搜索短语“deprecation notice”,代码示例就在那个黄色框的正下方。确保使用参数,例如:
.fail(function(error) { console.log(error); })请参阅:api.jquery.com/jQuery.ajax