GVKun编程网logo

Mockjs+Ajax实践(mockjs react)

6

在这里,我们将给大家分享关于Mockjs+Ajax实践的知识,让您更了解mockjsreact的本质,同时也会涉及到如何更有效地ajax和mock数据、Ajax技术一ajax提交表单jqueryaja

在这里,我们将给大家分享关于Mockjs+Ajax实践的知识,让您更了解mockjs react的本质,同时也会涉及到如何更有效地ajax 和 mock 数据、Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax、ajax(三) ajax提交表单、ajax实现文件上传、Ajax实例:原生js+thinkphp+ajax的内容。

本文目录一览:

Mockjs+Ajax实践(mockjs react)

Mockjs+Ajax实践(mockjs react)

需要完成的工作:利用mock js随机生成数据,通过ajax请求,获取这些数据并展示在网页中。

一 mock js随机生成数据

官方文档中,Mock.mock( ),可以说是mock的精髓所在。

Mock.mock( rurl?,rtype?,template|function( options ) )

根据数据模板生成模拟数据。

-rurl:当拦截到匹配rurl的Ajax请求时,根据数据模板template生成模拟数据,作为响应数据返回。
-rtype:表示需要拦截的ajax请求类型,比如get、post、put、delete等。

//js部分

var testPath = '/born',//匹配ajax操作的路径
    testMethod = 'get';     //匹配ajax请求类型

let temp = {
    'list|5-10': [{
        'aid|+1': 1,'title|1-6': '我是标题 ',//30字以内的标题
        'update_time|10000-99999':10000,'thumb':'@URL',//随机URL地址
        'color'    : '@color',//随机颜色
        'image':'@IMAGE("200x100")' //尺寸为200*100的图片
    }]
}

Mock.mock(testPath,testMethod,temp); //生成模拟数据

二 Ajax操作

点击按钮,获取数据,并对HTML元素进行操作

//HTML部分
    <h3>==测试·准备请求ajax·测试==</h3>

    <p></p>
    <button>点我请求ajax</button>

    <article>
       <!--<a href="">
            <p></p>
            <img src="" alt="">
       </a>    -->
    </article>

    <articleid="module">
        <a href="">
            <p></p>
            <img src="" alt="">
        </a>
    </article>


//Ajax请求处理

$("button").bind('click',function(){
    $.ajax({
        url: testPath,type: 'get',dataType: 'json',timeout: 1000,success:function(data,status,jqXHR){
            fillTemplet(data,jqXHR);  //ajax请求成功,执行这些操作
        },error:function(req,err){
            console.log('some err')
        console.log('req',req);
        console.log('status',status);
        console.log('err',err);
        }
    })
});

三 DOM操作

采用了两种方法,一种是直接在js中写入HTML,包括元素、内容等,另一种是克隆HTML模板,然后对其添加内容。推荐使用方法二,便于修改调试,符合内容、样式、数据分离的规则。

//js部分

//方法一
function fillTemplet(data,jqXHR){
    let father = $('.temp');

    $.each(data.list,function(index,obj){

        //根据mock数据(temp)生成内容
        //直接写入html
        let block = '<a href="'+ obj.thumb +'">'
                    + '<p>'+ obj.title +'</p>'
                    + '<img src="'+ obj.image +'" alt="我是图片">'
                    +'</a>'

        father.append(block);
    })
}

//方法二
function fillTemplet(data,obj){
        //方法二,克隆HTML中写好的module模板
        let child = $('#module').clone().removeAttr('id').removeClass('hide');
        child.children('a').attr('href',obj.thumb);
        child.find('p').text(obj.title).css('color',obj.color);
        child.find('img').attr('src',obj.image);
        father.append(child);
    })
}

ajax 和 mock 数据

ajax 和 mock 数据

ajax

ajax是一种技术方案,但并不是一种新技术。它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应。 实现在页面不刷新的情况下和服务端进行数据交互。

作用:
传统的网页(不使用ajax)。如果需要更新内容,必须重新加载整个网页,而通过使用ajax可以在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

实现方式

  • XMLHttpRequest对象
  • fetch(兼容性不如XMLHttpRequest)
    兼容性查询

范例

GET 范例

//异步GET var xhr = new XMLHttpRequest() xhr.open(‘GET‘,‘/login?username=evenyao&password=123‘,true) //get类型 数据需要拼接成url放到?后面 xhr.send() console.log(‘readyState:‘,xhr.readyState) xhr.addEventListener(‘readystatechange‘,function(){ //或者使用xhr.onload = function() //查看readyState状态 console.log(‘readyState:‘,xhr.readyState) }) xhr.addEventListener(‘load‘,function(){ console.log(xhr.status) if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){ var data = xhr.responseText console.log(data) }else{ console.log(‘error‘) } }) xhr.onerror = function(){ console.log(‘error‘) } //等同代码 var xhr = new XMLHttpRequest() xhr.open(‘GET‘,true) xhr.send() xhr.onreadystatechange = function(){ if(xhr.readyState === 4){ if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){ console.log(xhr.responseText) }else{ console.log(‘error‘) } } } xhr.onerror = function(){ console.log(‘error‘) } 

 

POST 范例

//异步POST var xhr = new XMLHttpRequest() xhr.open(‘POST‘,‘/login‘,true) //post拼接数据放掉send里面 //post拼接数据放掉send里面 xhr.send(makeUrl({ username:‘evenyao‘,password:‘123‘ })) xhr.addEventListener(‘load‘,function(){ console.log(xhr.status) if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){ var data = xhr.responseText console.log(data) }else{ console.log(‘error‘) } }) xhr.onerror = function(){ console.log(‘error‘) } //makeUrl拼接函数 function makeUrl(obj){ var arr = [] for(var key in obj){ arr.push(key + ‘=‘ + obj[key]) } return arr.join(‘&‘) } 

 

封装 ajax

//封装 ajax function ajax(opts){ var url = opts.url //如果有类型就使用用户输入的类型; 如果没有,默认为后面的 var type = opts.type || ‘GET‘ var dataType = opts.dataType || ‘json‘ var onsuccess = opts.onsuccess || function(){} var onerror = opts.onerror || function(){} var data = opts.data || {} //data序列化 var dataStr = [] for(var key in data){ dataStr.push(key + ‘=‘ + data[key]) } dataStr = dataStr.join(‘&‘) //GET类型 使用url拼接 if(type === ‘GET‘){ url += ‘?‘ + dataStr } //XMLHttpRequest对象创建 var xhr = new XMLHttpRequest() xhr.open(type,url,true) xhr.onload = function(){ if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ //成功 //如果返回的数据类型是json,就解析成json格式 if(dataType === ‘json‘){ onsuccess(JSON.parse(xhr.responseText)) }else{ onsuccess(xhr.responseText) } }else{ onerror() } } //如果断网,也会执行onerror() xhr.onerror = onerror() //POST类型 if(type === ‘POST‘){ xhr.send(dataStr) }else{ xhr.send() } } ajax({ url:‘http://xxx‘,type: ‘POST‘,data: { city: ‘北京‘ },onsuccess: function(ret){ console.log(ret) render(ret) },onerror: function(){ console.log(‘服务器异常‘) showError() } }) function render(json){ } function showError(){ } 

 

参考

你真的会使用XMLHttpRequest吗?
Ajax状态值及状态码

 

关于如何mock数据

http-server

本地使用http-server node工具启动一个静态服务器
以下是已经写好的ajax用法,这里采用GET类型,使用xhr.open(‘GET‘,‘/hello2.json‘,true)
在已经安装好nodehttp-server的情况下,先cd到对应的文件夹。然后通过http-server启动本地server。

 

分享图片

 


通过访问127.0.0.1:8080/indexl.html,并进入控制台,即可看到mock结果

 

分享图片

 

具体ajax用法代码:

<!DOCTYPE html> <html lang="en"> <head> <Meta charset="UTF-8"> <Meta name="viewport" content="width=device-width,initial-scale=1.0"> <Meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script type="text/javascript"> // ajax GET var xhr = new XMLHttpRequest() xhr.open(‘GET‘,‘/hello2.json‘,true) xhr.send() xhr.onload = function(){ console.log(xhr.status) if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){ var data = xhr.responseText console.log(data) console.log(JSON.parse(data)) }else{ console.log(‘error‘) } } xhr.onerror = function(){ console.log(‘error‘) } </script> </body> </html> 

模拟接口的json文件内容:

//hello2.json 内容 { "name": "go","success": true,"data": [ "70","80","90","年代" ] } 

 

github

在github上面写一个服务器进行mock
具体和本地区别不大,只是需要注意模拟接口的地址,因为域名是github.com,所以前面还需要加项目名,详情见github/mocktest里面的README.md
测试:
github pages

 

线上mock

使用easy-mock.com进行mock数据

  1. 进入easy-mock.com,登录注册账号之后进入创建项目,输入名称然后创建

     

    分享图片

     

 

 

  • 进入创建好的项目
     

    分享图片

     
  • 选择创建接口
     

    分享图片

     

  • 填写类型(get/post)、描述、并输入JSON格式的内容,点击创建
     

    分享图片

     
  • 生成链接,复制该链接
     

    分享图片

     
  • 将该链接粘贴到之前写好的ajax用法的xhr.open(‘GET‘,‘‘,true)当中

     

    分享图片

     
      7.  打开页面,进入控制台查看mock结果

    分享图片

  • Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax

    Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax

    ajax(三) ajax提交表单、ajax实现文件上传

    ajax(三) ajax提交表单、ajax实现文件上传

    式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单
    方式二:使用jquery的 .ajax(..)@H_301_205@;( .post 或 .get .ajax)
    方式三:使用jquery插件ajaxFileUpload.js, 支持上传文件,但不支持提交表单
    方式四:使用jquery.from.js, 支持提交同时含有文件和普通数据的复杂表单
    个人四种都用过,更好喜欢第二种和第四种; 用第二种来解决ajax普通请求,用第四种来解决文件上传/表单提交; 不多说,上代码

    方式一: from + iframe
    Test1.jsp:表单、iframe、提交表单

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>测试页面1,创建表单、iframe、提交表单</title>
    <Meta http-equiv="pragma" content="no-cache">
    <Meta http-equiv="cache-control" content="no-cache">
    <Meta http-equiv="expires" content="0">
    <script type="text/javascript" src="..省略/jquery.1.8.2.min.js"></script>
    <script> $(function() { //值得注意的是iframe会维护浏览器的历史,浏览器的后退/前进将根据ifream的访问历史来变化,而非主页面  $("#btn").click(function() { var value = $("#pic").val(); if (Utils.isEmpty(value)) { alert("请选择文件"); return false; } if (!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)) { alert("文件格式错误"); return false; } $("#form0").submit(); }); }); </script>
    </head>
    <body>
        <form id="form0" method="post" action="..省略/uploadOrgPic.html" enctype="multipart/form-data" target="hiddenFrame">
            上传头像: <input type="file" name="imageVo.image" id="pic" /> <input  type="button" value="提交" id="btn" />
        </form>
        <div id="result"></div>
        <iframe src="about:bland;" id="hiddenFrame" name="hiddenFrame" style="display: none;" frameborder="0"></iframe>
    </body>
    </html>

    Test2.jsp:后台处理完成后的跳转页面 (后台处理代码此处就不贴了,上传文件相信大家都会的)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>测试页面2,处理结果、返回父页面</title>
    <Meta http-equiv="pragma" content="no-cache">
    <Meta http-equiv="cache-control" content="no-cache">
    <Meta http-equiv="expires" content="0">
    <script> window.onload = function() { //检查是否存在父窗口 if (window.parent != window) { var resultDiv = window.parent.document.getElementById("result"); resultDiv.innerHTML = '因为是测试,所以简单的来这么一句话'; } } </script>
    </head>
    <body>
    </body>
    </html>

    方式二:$.ajax({..})
    值得注意的是: serialize() 可通过序列化表单值,创建URL编码文本字符串,但不支持文件上传的表单

    <script> $.ajax({ url : 你要请求的url链接,//默认为当前页面url aysnc : true,//是否异步,默认true  cache : true,//使用缓存,默认true  type : "POST",//请求方式,默认Get  dataType : 'JSON',//预期服务器返回的数据类型 (若不指定jquery将根据Http包MIME信息来判断)  headers : { 'ClientCallMode' : 'ajax' },//添加头部,也可通过beforeSend函数添加  data : $('#formid').serialize(),//要发送的数据,将自动转换为请求字符串格式。 此处为表单序列化后生成的字符串  success : function(data) { //执行成功的回调函数  alert("success"); },error : function(request) { //执行错误的回调函数(包含三个参数:XMLHttrRequest、错误信息、捕获的异常对象)  alert("error"); } }); </script>

    方式三:使用jquery插件ajaxFileUpload.js,该方式提交时无需表单,也提交不了表单,只用于文件上传
    若在文件上传同时还要传递其它的参数,通过设置data属性即可实现; 但如果需要的参数过多,则不建议使用这种方式,个人更倾向于方式四

    <script> $("#uploadFile").click(function() { var value = $("#imageInput").val(); if (Utils.isEmpty(value)) { alert("请选择文件"); return false; } if (!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)) { alert("文件格式错误"); return false; } $.ajaxFileUpload({ url : 'url',secureuri : false,//是否启用安全提交,默认false  dataType : 'JSON',//预期服务器返回的数据类型  fileElementId : 'imageInput',//文件域id值  data : { 'name' : 'abc' },//其它参数  success : function(data,status) { alert(data); },error : function(data,status,_exception) { alert(_exception); } }); }); </script>

    方式四:jquery.form.js

    <script> function ajaxSubmitForm() { var value = $("#pic").val(); if (Utils.isEmpty(value)) { alert("请先选择文件"); return false; } if (!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)) { alert("文件格式错误"); return false; } var option = { url : '..省略/uploadOrgPic.ac',type : 'POST',dataType : 'json',headers : { "ClientCallMode" : "ajax" },//添加请求头部  success : function(data) { alert(JSON.stringify(data)); },error : function(data) { alert(JSON.stringify(data) + "--上传失败,请刷新后重试"); } }; $("#form0").ajaxSubmit(option); return false; //最好返回false,因为如果按钮类型是submit,则表单自己又会提交一次;返回false阻止表单再次提交  } </script>

    Ajax实例:原生js+thinkphp+ajax

    Ajax实例:原生js+thinkphp+ajax

    发现很多实例都是jQuery+thinkPHP+ajax
    所以在这次项目中使用原生ajax的时候遇到的问题查都查不到,是自己一点点调试出来的。
    很难忘的一次经历,所以一定要记下来:

    先说下ajax技术到底是个什么东东吧。
    刚学前端的时候就听说过这个名词,但是项目中一直也没有使用过。
    后来有了一些基础之后,知道它是用来和后台交互的,可以实现部分刷新,现在很多复杂的表单填写页面大都会用到ajax技术。
    开始找实习以后就在w3chool上看相关知识,实现小demo.也看《高级程序设计》。
    前几天终于有机会在自己的项目中使用它,感觉自己进步很多。

    ajax全名是:Asynchronous Javascript And XML异步的JavaScript和XML
    传统网页中前端拿到后端的数据都是要重新加载页面的,但是ajax使得前端可以只更新部分数据,比如注册的时候,输入用户名,然后点击注册按钮,前端把用户名传给后台,后台发现数据库中已经有这个用户名存在,就会返回【用户名已存在】,这样用户名的input框后面会出现提示【用户名已存在】,而整个页面没有变化
    好了废话不多说,先说下ajax在前端实现的过程:

    1. 创建XHR对象
      var xmlhttp;
    2. 实例化XHR对象(分为IE56浏览器和其他浏览器)
      if (window.XMLHttpRequest){
      xmlhttp=new XMLHttpRequest(); }
      else{
      xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);}

    3. 发送请求,open方法和send方法
      xmlhttp.open(“GET”,”gethint.PHP?string=”+str,true);
      open的三个参数分别的是,方式用post还是get,url,同步还是异步的方式,默认是异步的(true)
      string是后台需要get的时候用的名字,str是js中需要发给后台的变量名
      url需要根据后台使用框架的路由规则来写


      1. 5.

    我们今天的关于Mockjs+Ajax实践mockjs react的分享已经告一段落,感谢您的关注,如果您想了解更多关于ajax 和 mock 数据、Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax、ajax(三) ajax提交表单、ajax实现文件上传、Ajax实例:原生js+thinkphp+ajax的相关信息,请在本站查询。

    本文标签:

    上一篇android – 会覆盖layout_width / layout_height值吗?(android:layout_width="-2")

    下一篇几种常用的ajax配合json数据格式向后台发送请求以及后台如何接收数据