主要功能流程介绍

循环获取列表数据

点击列表数据进入详情页

点击报名参加弹出报名成功提示框

点击提示框中的确定按钮,跳回列表页

代码实现流程和解说

一、列表页

1、访问链接list.PHP时判断是pc端还是客户端

$user_agent_arr = mall_get_user_agent_arr();
if(MALL_UA_IS_PC == 1)
{
    //****************** pc版 ******************
    include_once './list-pc.PHP';

}
else
{

    //****************** wap版 ******************
    include_once './list-wap.PHP';

}

2、如果是wap版就跳转到 list-wap.PHP 页面,载入 list.tpl.htm页面

$pc_wap = 'wap/';
$tpl = $my_app_pai->getView(TASK_TEMPLATES_ROOT.$pc_wap.'Trade/list.tpl.htm');

3、list.tpl.htm 页面进行渲染模板
HTML

<div class="page-view " data-role="page-container">

        <div class="sales-list-page">
            <div id="render-ele"></div>
        </div>

    </div>

JS

$(function() // 渲染模块 {
        //请求PHP的url
        var TradE_AJAX_URL = window.$__ajax_domain + 'get_Trade_list.PHP';
        //获取已经封装在list.js里面的一个对象list_item_class
        var list_item_class = require('../../../../modules/list/list.js');
        //获取模板块
        var template = __inline('./list-item.tmpl');

        var list_obj = new list_item_class({
            ele : $("#render-ele"),//渲染数据到id为render-ele中
            url : TradE_AJAX_URL,//请求数据连接
            template : template //渲染的模板
        });

    });

list-item.tmpl模板内容(循环的列表内容)

<div class="item-wrap"> {{#each list}} {{#if is_enroll}} <a href="./detail.PHP?topic_id={{id}}&state=is_enter"> {{else}} <a href="./detail.PHP?topic_id={{id}}&state=no_enter"> {{/if}} <div class="item ui-border-b" > <div class="img-item"> <i class="img" style="background-image: url({{img}});"> </i> </div> <div class="text-item"> <div class="txt-con-1"> <h3 class="title f14">{{title}}</h3> <p class="txt f10 color-999">所属品类:{{type}}</p> </div> <div class="txt-con-2"> <span class="color-333 join-in "> {{ enroll_text }} </span> </div> </div> </div> </a> {{/each}} </div>

4、list.js进行数据处理,仅是对象的部分方法,具体的方法请自行写。

_self.ajax_obj = utility.ajax_request 
        ({
            url : self.send_url,data : self.ajax_params,beforeSend : function() {
                self._sending = true;
                _self.$loading = $.loading
                ({
                    content:'加载中...'
                });

            },success : function(data) {
                self._sending = false;
                //获取数据
                var list_data = data.result_data.list;
                console.log(data);
                //渲染前处理事件
                self.$el.trigger('list_render:before',[self.$list_container,data]);

                _self.$loading.loading("hide");

                //是否有分页
                self.has_next_page = data.result_data.has_next_page;

                // 无数据处理 
                if(!list_data.length && page == 1)
                {
                    abnormal.render(self.$render_ele[0],{});

                    self.$load_more.addClass('fn-hide');

                    return;
                }
                else
                {
                    self.$load_more.removeClass('fn-hide');
                }

                //把数据放入模板
                var html_str = self.template
                ({
                    list : list_data
                });
                //插入渲染列表
                self.$list_container.append(html_str);
                //渲染后处理事件
                self.$el.trigger('list_render:after',data,$(html_str)]);

                self.setup_event();
            },error : function() {
                self._sending = false;
                _self.$loading.loading("hide");
                $.tips
                    ({
                        content:'网络异常',stayTime:3000,type:'warn'
                    });
            }
        })

5、get_Trade_list.PHP接收到前端页面发过来的请求,然后进行数据收集处理最终返回数据给前台页面

// 接收参数
$page = intval($_INPUT['page']);



if(empty($page))
{
    $page = 1;
}

// 分页使用的page_count
$page_count = 5;

if($page > 1)
{
    $limit_start = ($page - 1)*($page_count - 1);
}
else
{
    $limit_start = ($page - 1)*$page_count;
}

$limit = "{$limit_start},{$page_count}";



//请求数据库的借口
$sales_list_obj = POCO::singleton ( 'pai_topic_class' );
$ret = $sales_list_obj-> get_task_list(false,'','id DESC',$limit);





// 输出前进行过滤最后一个数据,用于真实输出
$rel_page_count = 4;



$has_next_page = (count($ret)>$rel_page_count);

if($has_next_page)
{
    array_pop($ret);
}

$output_arr['page'] = $page;

$output_arr['has_next_page'] = $has_next_page;

$output_arr['list'] = $ret;

// 输出数据
mall_mobile_output($output_arr,false);

6、前端页面接收到get_Trade_list.PHP返回的数据,从而进行判断将数据库的内容显示在前台页面中。模板输出

$tpl->output();

详情页

1、点击列表页进入详情页(detail.PHP)
detail.PHP页面 接收 列表传过来的数据

//接收list传过来的参数
$topic_id =  intval($_INPUT['topic_id']);
$state = $_INPUT['state'];

if (empty($topic_id)) 
{
    header("location: ".'./list.PHP');
}

//数据库借口
$Trade_detail_obj = POCO::singleton ( 'pai_topic_class' );
$ret = $Trade_detail_obj->get_task_detail($topic_id,$yue_login_id);

2、判断是pc端还是客户端(类似列表页)
3、跳转到detail-wap.PHP加载模板detail.tpl.htm同时也带参数过去

$pc_wap = 'wap/';
$tpl = $my_app_pai->getView(TASK_TEMPLATES_ROOT.$pc_wap.'Trade/detail.tpl.htm');

//模板附带以下三个参数到detail.tpl.htm中
$tpl->assign('ret',$ret);
$tpl->assign('topic_id',$topic_id);
$tpl->assign('state',$state);

4、页面引用对象ret中的字段

<div class="sales-detail-page">
            <div class="item-wrap">
                <div class="item-1 item">
                    <div class="img-item">
                        <i class="img" >
                                <img src="{ret.img}"/>
                        </i>
                    </div>  
                    <div class="txt-item">
                        <h3 class="title f16 color-333 fb">{ret.title}</h3>
                        <p class="sign-in-txt color-666">
                            {ret.enroll_text}
                        </p>
                    </div>
                </div>

                <div class="item-3 item">
                    <div class="txt-item">
                        <h3 class="title f14 color-333 fb">生意机会详情</h3>
                        <div class="txt-con f14 color-666">
                            <p class="txt">{ret.content}</p>
                        </div>
                    </div>
                </div>
            </div>
            <div class="sign-name-item">
            <!-- IF state = "is_enter" -->
                <button class="ui-button-submit had-joined">
                    <span class="ui-button-content">已参加</span>
                </button>
            <!-- ELSE -->
            <button class="ui-button-submit" id="submit">
                <span class="ui-button-content">报名参加</span>
            </button>
            <!-- ENDIF -->
            </div>
        </div>

5、点击报名参加按钮进行数据处理

var _self = {};
        $btn.on('click',function() {
            var data  =  
            {
                topic_id : {ret.id}
            }
            utility.ajax_request({
                url : window.$__ajax_domain+'add_task_enroll_Trade.PHP',data : data,type : 'POST',cache : false,beforeSend : function() {
                    _self.$loading = $.loading({
                        content : '发送中.....'
                    });
                },success : function(data) {
                    _self.$loading.loading("hide");
                    //请求成功后显示成功报名提示框,点击报名提示框确定按钮跳回列表页面
                        if (data.result_data.result==1) 
                        {
                                var dialog = utility.dialog
                                        ({
                                            "title" : '',"content" : '提交成功,点击确定返回',"buttons" : ["确定"]
                                        });
                                                 dialog.on('confirm',function(event,args) {
                     window.location.href = document.referrer;
              });

                    return;
              }





                },error : function() {
                    _self.$loading.loading("hide");
                    $.tips({
                        content : '网络异常',stayTime : 3000,type : 'warn'
                    });
                }

            });

        });

AJAX获取数据然后显示在页面的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. AmazeUI 折叠面板的实现代码

    这篇文章主要介绍了AmazeUI 折叠面板的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 有关HTML5页面在iPhoneX适配问题

    这篇文章主要介绍了有关HTML5页面在iPhoneX适配问题,需要的朋友可以参考下

  8. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Html5百叶窗效果的示例代码

    本篇文章主要介绍了Html5百叶窗效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部