AJAX获取数据然后显示在页面

14 篇文章 0 订阅
8 篇文章 0 订阅

主要功能流程介绍

循环获取列表数据
这里写图片描述
点击列表数据进入详情页
这里写图片描述
点击报名参加弹出报名成功提示框
这里写图片描述
点击提示框中的确定按钮,跳回列表页

代码实现流程和解说
一、列表页

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',[self.$list_container,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'
                    });
                }

            });

        });
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Ajax 获取的数据可以使用 JavaScript 进行操作,然后写入页面中。具体来说,可以使用以下步骤: 1. 定义一个 JavaScript 函数,用于执行 Ajax 请求,并处理响数据。 2. 在该函数中,使用 XMLHttpRequest 对象发起请求,并监听该对象的 readystatechange 事件,以确定请求的状态。 3. 当 readystate 为 4 且请求成功时,通过 responseText 属性获取服务器响的文本数据。 4. 对于该数据,您可以使用 JavaScript 进行任何操作,例如将其转换为 JSON 对象,并通过使用 DOM 操作,将其写入页面中的任何元素。 这是一个简单的示例: ``` function updatePage() { var xhr = new XMLHttpRequest(); xhr.open("GET", "data.json", true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var data = JSON.parse(xhr.responseText); document.getElementById("result").innerHTML = data.message; } }; xhr.send(); } ``` 在此示例中,我们向 data.json 发出请求,并在响中读取 message 字段的值。最后,我们将该值写入页面中的 "result" 元素。 ### 回答2: 使用AJAX获取到的数据可以通过以下几种方式写入页面中: 1. innerHTML属性:可以将获取到的数据直接赋值给页面元素的innerHTML属性,例如: ```javascript var xhr = new XMLHttpRequest(); xhr.open("GET", "data.txt", true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { document.getElementById("myElement").innerHTML = xhr.responseText; } }; xhr.send(); ``` 上述代码中,通过AJAX获取到的数据会被赋值给id为"myElement"的页面元素的innerHTML属性。 2. DOM操作:可以通过DOM操作将获取到的数据插入到页面中的特定位置,例如: ```javascript var xhr = new XMLHttpRequest(); xhr.open("GET", "data.txt", true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var data = JSON.parse(xhr.responseText); var newElement = document.createElement("p"); newElement.innerHTML = data.name; document.getElementById("myContainer").appendChild(newElement); } }; xhr.send(); ``` 上述代码中,先通过AJAX获取到的数据解析为JSON对象后,创建一个新的p标签,将获取到的数据赋值给新创建的元素的innerHTML属性,最后将新元素插入到id为"myContainer"的页面容器中。 3. 模板引擎:可以使用模板引擎(如Mustache、Handlebars等)将获取到的数据与HTML模板进行结合生成最终的页面内容,例如: ```javascript var xhr = new XMLHttpRequest(); xhr.open("GET", "data.txt", true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var template = document.getElementById("template").innerHTML; var data = JSON.parse(xhr.responseText); var rendered = Mustache.render(template, data); document.getElementById("myContainer").innerHTML = rendered; } }; xhr.send(); ``` 上述代码中,首先获取到id为"template"的HTML模板,然后将获取到的数据解析为JSON对象,通过Mustache.render()方法将数据与模板结合生成最终的结果,最后将结果赋值给id为"myContainer"的页面容器。 ### 回答3: 使用Ajax获取的数据可以通过多种方式写入页面中。以下是几种常见的方法: 一、使用innerHTML属性:通过该属性可以直接将数据作为HTML代码写入到指定的页面元素中。例如,假设我们有一个id为"content"的div元素,可以使用以下代码将获取的数据写入到该div中: ```javascript document.getElementById("content").innerHTML = ajaxData; ``` 二、使用innerText或textContent属性:如果获取的数据不需要解析为HTML代码,可以使用innerText或textContent属性将数据写入到指定的页面元素中。例如: ```javascript document.getElementById("content").innerText = ajaxData; // 或者 document.getElementById("content").textContent = ajaxData; ``` 三、创建新的HTML元素:可以通过JavaScript动态创建新的HTML元素,并将获取的数据添加到这些新元素中,然后将这些元素插入到页面中的适当位置。例如,假设我们想要将获取的数据写入到一个新的p标签中,并将其添加到id为"content"的div元素中,可以使用以下代码: ```javascript var p = document.createElement("p"); p.innerHTML = ajaxData; document.getElementById("content").appendChild(p); ``` 四、使用jQuery的方法:如果项目中引入了jQuery库,也可以使用其提供的方法来操作DOM。例如,使用jQuery的html()方法将获取的数据写入到指定的页面元素中: ```javascript $("#content").html(ajaxData); ``` 无论采用哪种方法,都可以根据具体需求和项目的开发环境选择最适合的方式将获取的数据写入到页面中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值