用ajax换一个屏幕的数据


为了达到更好的用户体验,使用ajax来做数据的切换。假设,一页显示100个产品,产品有图片,有标题以及其他属性。用户点击一些条件,ajax重新加载一页数据。如何操作dom,让加载的过程看起来更柔和?这个词不知道用的对不对,最简单粗暴的就是,数据dom全清掉,通过ajax获取的json重新组织dom替换过去。更好的做法是怎样呢?

这个问题,大家的回答,已经很收益了。我在加大些范围,如何在用户体验与SEO之间平衡呢?我需要搜索引擎收录我的数据,但是这种AJAX的方式,搜索引擎又不认识?

php Ajax JavaScript 前端开发 seo

Willow桑 9 years, 8 months ago

应该行不通,即使非关系型数据库能够实现,也会异常麻烦!

永遠D魔法師 answered 9 years, 8 months ago

"柔和"主要靠的是交互细节,比如加载过程中的视觉反馈(进度条/菊花),加载过程中的交互(正在加载的时候做了其他操作怎么办?是mask蒙住,是中止之前的加载,还是操作无效并有视觉反馈“加载中请勿操作”?),以及加载时间过长时的反馈(类似gmail“加载比预期慢,是否切换到普通html版本” “仍在进行/重试”)等等

chris8250 answered 9 years, 8 months ago

你提的这个问题是不是想问通过什么样的交互才能感觉起来更好?其实这个关键靠你自己的想象了
可以这样,点击执行ajax的时候,把要替换的dom先用渐隐效果隐藏掉,然后弹出一个loading的提示,成功获取数据后,替换数据,然后loadding消失,dom显示
获取数据有时候会很快,所以,在替换完数据后,延迟一下再进行交互,大约300ms就够了

莉子_提不起劲 answered 9 years, 8 months ago

先说明点,清除dom和页面加载自然没有必然联系,不能说我操作了dom,我页面加载就不友好了。页面的友好性是通过交互实现。当然了,频繁大量的操作dom会带来性能问题,会延长页面的加载时间。

先说明下实现

要是我来做的话,会使用模板引擎如handlebars,拿到数据后渲染成html插入到dom中。如果使用了MVVM框架,只需要改变下model就可以了,但是大部分的框架还是如题主所说的粗暴方式处理的,angularjs除外。所以楼主不要纠结了,就得简单粗暴的干,关键是怎么粗暴的干,让人感觉不出来。

再说下效果

首先,在不同页切换时,加个loading的效果。
其次,使用模板引擎管理你的html
如果所有的产品不是一次性展示在页面上,使用图片懒加载
请求过的数据要缓存下来,避免再次请求

SEO

如果要做SEO的话,这种方式是不可行的,因为你的数据都是通过js去渲染的,搜索引擎爬取你的链接时,页面内容都是空的,那怎么收录你的产品链接?
刚咨询了我们的SEO工程师,国内搜索引擎还是以百度为主的,暂时还没办法执行js。为了SEO还是采用后端渲染的方式吧。
除非你们产品有这么吊,那就像它这样
图片描述

卯花之佐久夜姬 answered 9 years, 8 months ago

Your Answer