ajax响应html格式

博客探讨了在Ajax请求中服务器返回数据的格式问题,强调服务器返回的数据必须是客户端可识别的字符串文本。文中以HTML和XML为例,讨论了它们在数据传输中的优缺点,如HTML的简单易用但可能的兼容性问题,以及XML的标准格式但使用上的复杂性。通过省市级联的例子,展示了如何在实际开发中处理Ajax与服务器交互的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坚持每天写博文,记录开发中的点点滴滴
ajax属于客户端的程序,java(php,asp,asp.net)属于服务器的程序.
ajax发送一个请求后,需要接受数据,但是服务器的数据无法直接在客户端使用.

问题:服务器返回的数据应该是客户端能认识的数据. 服务器的数据需要转换为客户端的数据. 客服端只认字符串.

总结:服务器返回的数据只能是字符串文本.

html格式:使用简单,后台直接生成前台需要的html代码,然后前台通过innerHTML直接设置,但是返回的html代码只能为某一个标签使用,还有浏览器兼容问题.

xml格式:使用麻烦,但是xml只负责数据的描述,不负责数据的显示格式,这样这个数据在任何地方都可以使用,而且xml是网络传输标准格式(但是目前不使用它,而使用JSON)

这里以一个例子来说明:省市级联

先写两个bean,并模拟一些数据:
City:

package Ajax.city;

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

/**
 * 城市对象
 * 
 * @author YaoXin
 */
/**
 * 
 * json对象描述city对象
 * {
 *  "id":1,
 *  "name":"四川"
 * }
 * 
 * json对象描述多个city对象
 * [
 *  {
 *      "id":1,
 *      "name":"四川"
 *  },
 *  {
 *      "id":2,
 *      "name":"云南"
 *  }
 * ]
 */
public class City {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public City() {

    }

    public City(Long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    /**
     * 根据省份id查询省份中的城市!
     * 
     * @return
     */
    public static List<City> getCityByProvinceId(Long id) {

        List<City> citys = new ArrayList<City>();

        if (id == 1) {
            citys = Arrays.asList(
                    new City(1L,"成都"),
                    new City(2L,"南充"),
                    new City(3L,"绵阳"),
                    new City(4L,"遂林"),
                    new City(5L,"达州"),
                    new City(6L,"德阳"),
                    new City(7L,"乐山")
            );
        } else if (id == 2) {
            citys = Arrays.asList(
                    new City(11L,"广州"),
                    new City(12L,"佛山"),
                    new City(13L,"东莞")
            );
        } else if (id == 3) {
            citys = Arrays.asList(
                    new City(21L,"昆明"),
                    new City(22L,"玉溪"),
                    new City(23L,"丽江")
            );
        }
        return citys;
    }
}

Province:

package Ajax.city;

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

/**
 * 省份
 * @author Administrator
 */
/**
 * xml 描述一个对象
 * <datas>
     * <data id="1">
     *      四川  
     * </data>
     * <data id="2">
     *      云南
     * </data>
 * </datas>
 */
public class Province {

    private Long id;
    private String name;

    public Province(Long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Province() {
        super();
    }

    public static List<Province> getAllProvince() {
        List<Province> provinces = new ArrayList<Province>();
        provinces.add(new Province(1L, "四川"));
        provinces.add(new Province(2L, "广东"));
        provinces.add(new Province(3L, "云南"));
        return provinces;
    }
}

写一个html:city.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ajax响应格式(HTML)</title>
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../city_html.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
    <!--
        onchange : 选项修改的时候. 
     -->
    省份:<select id="provinceSelect" onchange="provinceSelectChange()">
            <option value="-1">--请选择--</option>
       </select>
    城市:<select id="citySelect">
            <option value="-1">--请选择--</option>
       </select>
</body>
</html>

引入了Query和一个自己写的city_html.js,city_html.js:


//页面加载完毕事件
window.onload = function(){
    //console.debug(document.getElementById("provinceSelect"));
    $.get("../../CityHTMLServlet?cmd=listProvince",function(data){
        document.getElementById("provinceSelect").innerHTML += data;
    });
};


function provinceSelectChange(){
    //获取当前选中的id
    var provinceId = document.getElementById("provinceSelect").value;

    var citySelect = document.getElementById("citySelect");
    citySelect.innerHTML = "<option value='-1'>--请选择--</option>";

    if(provinceId==-1){
        return;
    }

    $.get("../../CityHTMLServlet?cmd=listCity","provinceId="+provinceId,function(data){
        citySelect.innerHTML += data;
    });
}

CityHTMLServlet:

package Ajax.city;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CityHTMLServlet")
public class CityHTMLServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        /**
         * cmd=listProvince 获取所有省份列表
         * cmd=listCity     获取某个省份对应的城市列表    provinceId省份的id.
         */
        String cmd = request.getParameter("cmd");
        if("listProvince".equals(cmd)){
            List<Province> provinces = Province.getAllProvince();
            /*
                <option value="1">四川</option>
                <option value="2">云南</option>
            */
            for (Province province : provinces) {
                out.println("<option value='" +province.getId()+"'>"+province.getName()+"</option>");
            }

        }else if("listCity".equals(cmd)){
            String id = request.getParameter("provinceId");
            List<City> citys = City.getCityByProvinceId(Long.parseLong(id));
            for (City city : citys) {
                out.println("<option value='" +city.getId()+"'>"+city.getName()+"</option>");
            }
        }
    }
}

这些代码都比较简单,这里贴上代码作为记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值