XMLHttpRequest发送JSON请求

1.前言

现在Ajax技术已逐步使用JSON响应来获取传统的XML响应。当服务器响应数据量较大,而且响应数据有复杂的结构关系时,使用JSON响应是很好的选择。

2.例子

下面的例子示范一个用户根据种类查看图书的示例,该服务器响应是N本图书信息,它们具有数据量较大,而且具有复杂的结构关系的特征,为此考虑使用JSON响应进行处理。

(源码)

1)        下面是提供服务器相应的Servlet代码。

@WebServlet(urlPatterns={"/chooseBook"})
public class ChooseBookServlet extends HttpServlet
{
	public void service(HttpServletRequest request ,
		HttpServletResponse response)
		throws IOException , ServletException
	{
		String idStr = (String)request.getParameter("id");
		int id = idStr == null ? 1 : Integer.parseInt(idStr);
		List<Book> books = new BookService().getBookByCategory(id);
		response.setContentType("text/html;charset=GBK");
		PrintWriter out = response.getWriter();
		out.println(new JSONArray(books));
	}
}

2) BookService是一个简单的业务逻辑组件,它直接使用了一个Map来模拟系统数据库。BookService类代码如下。

 public class BookService
{
	// 模拟内存中数据库
	static Map<Integer , List<Book>> bookDb =
		new LinkedHashMap<>();
	static
	{
		// 初始化bookDb对象
		List<Book> list1 = new ArrayList<>();
		List<Book> list2 = new ArrayList<>();
		List<Book> list3 = new ArrayList<>();
		list1.add(new Book(1 , "Java" , "owen" , 109));
		list1.add(new Book(2 , "Java EE" , "owen" , 99));
		list1.add(new Book(3 , "Android" , "owen" , 89));
		list2.add(new Book(4 , "西游记" , "吴承恩" , 23));
		list2.add(new Book(5 , "水浒" , "施耐庵" , 20));
		list3.add(new Book(6 , "乌合之众" , "古斯塔夫.勒庞" , 16));
		list3.add(new Book(7 , "不合时宜的考察" , "尼采" , 18));
		bookDb.put(1 , list1);
		bookDb.put(2 , list2);
		bookDb.put(3 , list3);
	}
	public List<Book> getBookByCategory(int categoryId)
	{
		return bookDb.get(categoryId);
	}
}

3)        当服务器向浏览器生成符合JSON格式字符串以后,浏览器端需要解析该JOSN字符串,将它解析成JavaScript对象或JavaScript数组。一旦将服务器响应数据“转换“成JavaScript对象或JavaScript数组,接下来使用DOM将响应显示出来即可。下面是JSON响应回调函数代码。

// 定义处理响应的回调函数
function processResponse()
{
	// 响应完成且响应正常
	if (xmlrequest.readyState == 4)
	{
		if (xmlrequest.status == 200)
		{
			var bookTb = document.getElementById("book");
			// 删除bookTb原有的所有行
			while(bookTb.rows.length > 0)
			{
				bookTb.deleteRow(bookTb.rows.length - 1);
			}
			// 获取服务器的JSON响应
			// 并调用eval()函数将服务器响应解析成JavaScript数组
			var books = eval(xmlrequest.responseText);
			// 遍历数组,每个数组元素生成一个表格行
			for (var i = 0 , len = books.length ; i < len ; i++)
			{
				var tr = bookTb.insertRow(i);
				// 依次创建4个单元格,并为单元格设置内容
				var cell0 = tr.insertCell(0);
				cell0.innerHTML = books[i].id;
				var cell1 = tr.insertCell(1);
				cell1.innerHTML = books[i].name;
				var cell2 = tr.insertCell(2);
				cell2.innerHTML = books[i].author;
				var cell3 = tr.insertCell(3);
				cell3.innerHTML = books[i].price;
			}
		}
		else
		{
			//页面不正常
			window.alert("您所请求的页面有异常。");
		}
	}
}

4)        运行结果

时间: 2024-11-05 22:46:03

XMLHttpRequest发送JSON请求的相关文章

Httpclient发送json请求

一.Httpclient发送json请求 public String RequestJsonPost(String url){    String strresponse = null;    try{        HttpClient hc = new DefaultHttpClient();       HttpPost hp = new HttpPost(url);       JSONObject jsonParam = new JSONObject();       jsonPara

如何使用 Jmeter 发送 Json 请求

公司最近有一个项目,需要持续发送大量的 Json 请求到服务器,从而测试服务器可靠性. 我就发送 Json 请求部分发布这个博客. 一般来说, Json 请求的数据都保存到 CSV 文件中,然后使用 Jmeter 不断的从文件中读取 Json,不断的发送. 在这一部分,目前互联网上主流的处理方式是,对 Json 请求中每个字段的内容进行格式化,然后在 Jmeter 界面上进行再组装. 而一旦 Json 请求中的字段太多了,这种处理方法就太过繁琐了. 我觉得可以尝试把每个 Json 请求 做为一个

java httpclient发送json 请求 ,go服务端接收

/***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOException; import java.net.URLEncoder; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.GetMethod; import org.apache

使用xmlHttprequest 发送异步请求(Ajax核心对象)

1.创建XMlHtttpRequest对象 因为浏览器不同载入xmlHttpRequst的方式也不一样 IE中:var  xmlhttp=new ActiveXObject("MSXML2.XMLHTTP"); 其他浏览器:var  xmlhttp=new  XMLHttpRequest(); 2.对onreadystatechange事件追加方法 当xmlhttp.readystate 状态改变时会自动触发这个事件 readystate可能出现的五种状态: 0:未初始化:XMLHtt

XMLHttpRequest发送XML请求

1.前言 对于请求参数为大师key-value对的情形,笔者更加倾向于使用简单的POST请求.但对于某些极端的表形,如请求参数特别多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户产端页面将请求参数封装成XML字符串的形式,服务器则负责解析XML字符串.当然,服务器获取到XML字符串后,可借助dom4j或JDOM等工具来解析. 2.例子 这个例子还是跟前面所讲的一样,通过左边的点击国家,然后点击"发送",右边 就可以看到国家

XMLHttpRequest发送POST请求

1.前言 POST请求的适用性更广,可使用更大的请求参数,而且POST请求的请求参数通常不能直接看到.因此在使用Ajax发送请求时,尽量采用POST方式而不是GET方式发送请求.发送POST请求通常需要如下的三个步骤: 1)        使用open方法打开连接时,指定使用POST方式发送请求. 2)        设置正确的请求头,POST请求通常应设置Content-Type请求头 3)        发送请求,把请求参数转换为查询字符串,将字符串作为send()方法请求参数. 2.例子

postman 发送json请求

1.选择post请求方式,同时将header的content-type设置为application/json 2.设置body的编码方式为raw,application/json,  raw是发送纯文本,不包含任何空格的编码方式 原文地址:https://www.cnblogs.com/YrRoom/p/11136236.html

jquery发送json请求,给springmvc接收

js var obj = { 'name':name, 'desc':desc, 'scheduleStartTime':scheduleStartTime, 'scheduleEndTime':scheduleEndTime }; $.ajax({ url: "../task/insert", type: "post", contentType:"application/json;charset=UTF-8", data: JSON.strin

httpClient发送Json请求,结果返回Json.

public static JSONObject post(String url,JSONObject json){ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); JSONObject response = null; try { StringEntity s = new StringEntity(json.toString()); s.setContentEncoding("UTF