Ajax:Asynchronous JavaScript and XML,其实这并不是一项新的技术,不过是融合了几种技术,实现了异步请求,即不需要刷新页面,用户并不会察觉到有请求的发生,但是实际上浏览器引擎发送了请求,只不过用户不再需要等到服务器的响应才去执行其他操作。
关键对象:XMLHttpRequest
关键方法:
open();发送请求
send();发送数据
属性:
readyState
status (服务器返回的状态码)
responseText
responseXML
事件:onreadystatechange

function getXHR() {
     var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+,Firefox,Chrome,Opera,Safari
         xmlhttp=new XMLHttpRequest();
    } else {// code for IE6,IE5
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
   return xmlhttp;
}
        //1.得到XMLHttpRequest对象
            var xhr = getXHR();
            //4.根据状态的改变执行函数
            xhr.onreadystatechange = function () {
              if(xhr.readyState == 4){
                  if(xhr.status == 200){
                       if(xhr.responseText == 'true') {
                           document.getElementById("msg").innerHTML ='用户名已存在';
                       }else if(xhr.responseText == 'false'){
                           document.getElementById("msg").innerHTML ='用户名可用';
                       }
                  }
              }
            };
            //2.open方法发起请求
            xhr.open("get","${pageContext.request.contextpath}/servlet/ajaxServlet?name="+name);
            //3.send方法
            xhr.send(null);

JSONObject对象所依赖的jar包:

package com.itdream.json;

import com.itdream.domain.Book;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/** * Created by Dream on 2017/12/7. */
public class JsonTest {
    @Test  //使用JSONObject封装数据对象类型数据
    public void test1(){
        Book b = new Book();
        b.setId("123");
        b.setName("Is your light still shinning?");
        b.setPrice(99);
        b.setCategory("启发");
        b.setPnum(15);
        b.setDescription("启发思维");

        String s = JSONObject.fromObject(b).toString();
        System.out.println(s);
    }
    //{"category":"启发","description":"启发思维","id":"123","name":"Is your light still shinning?","pnum":15,"price":99}

    @Test  //使用JSONArray封装List<Book>对象数据类型
    public void test2(){
        List<Book> list = new ArrayList<>();
        Book b1 = new Book();
        b1.setId("123");
        b1.setName("Is your light still shinning?");
        b1.setPrice(99);
        b1.setCategory("启发");
        b1.setPnum(15);
        b1.setDescription("启发思维");

        Book b2 = new Book();
        b2.setId("123");
        b2.setName("Is your light still shinning?");
        b2.setPrice(99);
        b2.setCategory("启发");
        b2.setPnum(15);
        b2.setDescription("启发思维");

        Book b3 = new Book();
        b3.setId("123");
        b3.setName("Is your light still shinning?");
        b3.setPrice(99);
        b3.setCategory("启发");
        b3.setPnum(15);
        b3.setDescription("启发思维");

        list.add(b1);
        list.add(b2);
        list.add(b3);
        String s = JSONArray.fromObject(list).toString();
        System.out.println(s);
    }
    //[{"category":"启发","price":99},{"category":"启发","price":99}]

    @Test  //使用JsonConfig去除不要的字段数据
    public void test3(){
        List<Book> list = new ArrayList<>();
        Book b1 = new Book();
        b1.setId("123");
        b1.setName("Is your light still shinning?");
        b1.setPrice(99);
        b1.setCategory("启发");
        b1.setPnum(15);
        b1.setDescription("启发思维");

        Book b2 = new Book();
        b2.setId("123");
        b2.setName("Is your light still shinning?");
        b2.setPrice(99);
        b2.setCategory("启发");
        b2.setPnum(15);
        b2.setDescription("启发思维");

        Book b3 = new Book();
        b3.setId("123");
        b3.setName("Is your light still shinning?");
        b3.setPrice(99);
        b3.setCategory("启发");
        b3.setPnum(15);
        b3.setDescription("启发思维");

        list.add(b1);
        list.add(b2);
        list.add(b3);
        JsonConfig jc = new JsonConfig();
        jc.setExcludes(new String[]{"pnum","id","category","description"});
        String s = JSONArray.fromObject(list,jc).toString();
        System.out.println(s);
    }
    //结果:
    //[{"name":"Is your light still shinning?",{"name":"Is your light still shinning?","price":99}]
}

在进行购物的时候,我们将欲购买的商品添加至购物车,购物车应该存放于session对象中
思路:
初始化的数据num=1,便于对第一次加入购物车时的数据进行数量赋值
1.首先获取session对象中的cart数据
2.如果是第一次添加购物车,那么获取的cart对象则为空,这时我们new一个购物车对象
3.判断添加的商品是否存在于购物车中,如果存在,则需要将原先存在于购物车中的商品的数量取出并进行+1操作;如果不存在于购物车中,则将初始化的num赋予给对应商品的数量
4.将商品及其num值添加到cart中
5.将cart设置到Session域中

public class AddCartServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException{
        response.setContentType("text/html;charset=utf-8");
        String id = request.getParameter("id");
        BookService bs = new BookService();
        Book book = bs.findBookById(id);
        Map<Book,String> cart = (Map<Book,String>) request.getSession().getAttribute("cart");
        int num = 1; //记录数量
        if(cart == null){  //第一次加购物车,购物车还没放session
            cart = new HashMap<>();
        }
        if(cart.containsKey(book)){  //如果这本书已经存在于购物车,那么则需要取出cart中的value值,+1
            String n = cart.get(book);
            num = Integer.parseInt(n)+1;
        }
        cart.put(book,num+"");
        request.getSession().setAttribute("cart",cart);
        response.getWriter().write("<a href='"+request.getcontextpath()+"/servlet/pageServlet'>继续购物</a>,<a href='"+request.getcontextpath()+"/cart.jsp'>查看购物车</a>");
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException{
        doGet(request,response);
    }
}

Ajax、Json对象及完成添加购物车的功能的更多相关文章

  1. Swift 字符串替换/过滤/切割/拼接

    替换为/结果过滤过滤掉单个字符/结果过滤掉开头和结尾的空白结果切割对字符串使用/作为分隔符来切割,不允许空字符串使用split函数结果是一个数组对字符串使用/作为分隔符来切割,允许空字符串结果拼接结果

  2. Swift开发教程--字符串的操作

    替换把?替换为/结果

  3. swift 网络搜索热词排行

    1.使用www.showapi.com上的接口,需要注册添加一个App,这样才能获取appid和secret密钥,调用前需要订购套餐(选免费的就可以了);2.外部库Podfile文件内容,SnapKit这里暂时不需要用到:3.桥接头文件参考:http://www.jb51.cc/article/p-pcleyxep-te.html4.AppTransportSecurityhasblockedac

  4. 如何在Swift中打乱数组?

    如何随机化或混洗Swift中的数组中的元素?例如,如果我的数组包括52张扑克牌,我想洗牌,以便洗牌。这个答案详细说明了如何在Swift的各种版本中添加Fisher-Yatesshuffle。Swift3版本是最宽松的,但是它们至少可以用于数组。每个Swift版本的命名和行为与该版本的mutating和nonmutating排序方法相匹配。

  5. unit-testing – 如何在Swift中对NSFetchedResultsController进行单元测试

    我有一个Swift应用程序,它使用NSFetchedResultsController从持久存储中获取List对象:它的工作方式与预期的一样,我将List对象描述打印到控制台.我想为我的应用程序编写一些单元测试,所以我创建了扩展XCTestCase的类.代码编译没有问题,测试运行,但不幸的是我无法在该上下文中获取List对象.我在控制台中获得的所有内容都是List对象的数量和致命错误:线路上升:我

  6. swift – 检查自定义对象数组是否包含特定的自定义对象

    说我有一个非常简单的Person类我希望将一个这样的人的集合存储在一个属性中,该属性是一个Person类的数组,类型为Person也许我实现如下问题:我如何检查people.list是否包含实例alex,好吗?

  7. swift – 使用反射来设置对象属性,而不使用setValue forKey

    在Swift中,不可能使用.setValue(…)>可空类型字段,如Int?>具有枚举类型的属性>一个可空对象的数组,如[MyObject?]这有一个解决方法,也就是通过覆盖对象本身中的UnVersionKey方法的setValue.因为我正在写一个基于反射的通用对象映射器.请参阅EVReflection我想尽量减少这种手动映射.是否有其他方式自动设置这些属性?

  8. Swift Sliceable上的递归

    事实证明,有一个通用的解决方案.您需要添加这些通用要求:对于发布的问题,这给出了:这是任何切片上有用的通用缩减:我不能相信这一点,Apple开发论坛上的解决方案是posted.令人遗憾的是,通用要求如此涉及到这样一个基本操作–它几乎不直观!

  9. uitableview – 使用Swift的“使用未解析的标识符”

    我正在重写我在Swift中的一个应用程序,它显示SouthKohala的实时天气数据.爱Swift到目前为止!

  10. Android Checkbox listview选择全部(禁用/启用)

    参见英文答案>SelectingAllItemsinaListviewoncheckboxselect4个我想禁用/启用listview中的所有复选框.infact想通过单击顶部复选框来选择所有行为.谢谢解决方法这是我最终工作的地方,我正在使用游标适配器,而不仅仅是我的列表项的Arraylistadapter:list.getChildCount不起作用,因为它似乎只计算立即绘制的内容(不是屏幕外

随机推荐

  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找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部