美文网首页
Ajax的学习 异步刷新 以及错误No 'Access-Cont

Ajax的学习 异步刷新 以及错误No 'Access-Cont

作者: Zebraaa | 来源:发表于2018-07-23 13:18 被阅读0次

今天学习了ajax的异步刷新的使用
我做了一个简单的天气查询刷新 大致如下图:


html页面.png

好的首先我们要找到天气的接口api我使用的和风天气的api: http://www.heweather.com/documents/api/v5/weather

准备json数据的解析框架Gson ,以及生成json的jar架包
服务端代码:

@WebServlet("/test.do")
public class TestServlet extends HttpServlet{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");//设置http输出格式
        resp.setCharacterEncoding("utf-8");//设置字符编码格式
        resp.setHeader("Access-Control-Allow-Origin", "*"); 
        try {
            String city = req.getParameter("city");
            System.out.println(city);
            URL url = new URL
                    ("https://free-api.heweather.com/v5/suggestion?city="+city+"&key="+HttpUtils.CODE_ID);
            InputStream iStream = url.openStream();
            InputStreamReader isReader = new InputStreamReader(iStream,"utf-8");
            BufferedReader bReader = new BufferedReader(isReader);
            String res="";
            String line="";
            //读取数据
            while((line=bReader.readLine())!=null){
                res+=line;
            }
            bReader.close();
            isReader.close();
            iStream.close();
            System.out.println(res);
            Gson gson = new Gson();
            Test fromJson = gson.fromJson(res, Test.class);
            List<HeWeather5Bean> heWeather5 = fromJson.getHeWeather5();
            for(HeWeather5Bean bean:heWeather5){
                System.out.println(bean.getBasic().getCity());
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("city", bean.getBasic().getCity());
                jsonObject.put("suggestion", bean.getSuggestion().getComf().getTxt());
                
                resp.getWriter().write(jsonObject.toString());
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req, resp);
    }
    

}

bean类的生成可以使用Gsonformat工具就行了
还是上一下bean 吧 使用内部静态类

package com.Aj.bean;


import java.util.List;

public class Test {

    private List<HeWeather5Bean> HeWeather5;

    public List<HeWeather5Bean> getHeWeather5() {
        return HeWeather5;
    }

    public void setHeWeather5(List<HeWeather5Bean> HeWeather5) {
        this.HeWeather5 = HeWeather5;
    }

    public static class HeWeather5Bean {
        /**
         * basic : {"city":"南京","cnty":"中国","id":"CN101190101","lat":"32.04154587","lon":"118.76741028","update":{"loc":"2018-07-23 09:48","utc":"2018-07-23 01:48"}}
         * status : ok
         * suggestion : {"air":{"brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"},"comf":{"brf":"较不舒适","txt":"白天虽然有雨,但仍无法削弱较高气温带来的暑意,同时降雨造成湿度加大会您感到有些闷热,不很舒适。"},"cw":{"brf":"不宜","txt":"不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"},"drsg":{"brf":"炎热","txt":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。"},"flu":{"brf":"少发","txt":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"},"sport":{"brf":"较不宜","txt":"有降水,且风力较强,推荐您在室内进行低强度运动;若坚持户外运动,请选择避雨防风的地点。"},"trav":{"brf":"较适宜","txt":"有降水,气温较高,但风较大,能缓解湿热的感觉,还是适宜旅游,您仍可陶醉于大自然的美丽风光中。"},"uv":{"brf":"中等","txt":"属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"}}
         */

        private BasicBean basic;
        private String status;
        private SuggestionBean suggestion;

        public BasicBean getBasic() {
            return basic;
        }

        public void setBasic(BasicBean basic) {
            this.basic = basic;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public SuggestionBean getSuggestion() {
            return suggestion;
        }

        public void setSuggestion(SuggestionBean suggestion) {
            this.suggestion = suggestion;
        }

        public static class BasicBean {
            /**
             * city : 南京
             * cnty : 中国
             * id : CN101190101
             * lat : 32.04154587
             * lon : 118.76741028
             * update : {"loc":"2018-07-23 09:48","utc":"2018-07-23 01:48"}
             */

            private String city;
            private String cnty;
            private String id;
            private String lat;
            private String lon;
            private UpdateBean update;

            public String getCity() {
                return city;
            }

            public void setCity(String city) {
                this.city = city;
            }

            public String getCnty() {
                return cnty;
            }

            public void setCnty(String cnty) {
                this.cnty = cnty;
            }

            public String getId() {
                return id;
            }

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

            public String getLat() {
                return lat;
            }

            public void setLat(String lat) {
                this.lat = lat;
            }

            public String getLon() {
                return lon;
            }

            public void setLon(String lon) {
                this.lon = lon;
            }

            public UpdateBean getUpdate() {
                return update;
            }

            public void setUpdate(UpdateBean update) {
                this.update = update;
            }

            public static class UpdateBean {
                /**
                 * loc : 2018-07-23 09:48
                 * utc : 2018-07-23 01:48
                 */

                private String loc;
                private String utc;

                public String getLoc() {
                    return loc;
                }

                public void setLoc(String loc) {
                    this.loc = loc;
                }

                public String getUtc() {
                    return utc;
                }

                public void setUtc(String utc) {
                    this.utc = utc;
                }
            }
        }

        public static class SuggestionBean {
            /**
             * air : {"brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"}
             * comf : {"brf":"较不舒适","txt":"白天虽然有雨,但仍无法削弱较高气温带来的暑意,同时降雨造成湿度加大会您感到有些闷热,不很舒适。"}
             * cw : {"brf":"不宜","txt":"不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"}
             * drsg : {"brf":"炎热","txt":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。"}
             * flu : {"brf":"少发","txt":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"}
             * sport : {"brf":"较不宜","txt":"有降水,且风力较强,推荐您在室内进行低强度运动;若坚持户外运动,请选择避雨防风的地点。"}
             * trav : {"brf":"较适宜","txt":"有降水,气温较高,但风较大,能缓解湿热的感觉,还是适宜旅游,您仍可陶醉于大自然的美丽风光中。"}
             * uv : {"brf":"中等","txt":"属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"}
             */

            private AirBean air;
            private ComfBean comf;
            private CwBean cw;
            private DrsgBean drsg;
            private FluBean flu;
            private SportBean sport;
            private TravBean trav;
            private UvBean uv;

            public AirBean getAir() {
                return air;
            }

            public void setAir(AirBean air) {
                this.air = air;
            }

            public ComfBean getComf() {
                return comf;
            }

            public void setComf(ComfBean comf) {
                this.comf = comf;
            }

            public CwBean getCw() {
                return cw;
            }

            public void setCw(CwBean cw) {
                this.cw = cw;
            }

            public DrsgBean getDrsg() {
                return drsg;
            }

            public void setDrsg(DrsgBean drsg) {
                this.drsg = drsg;
            }

            public FluBean getFlu() {
                return flu;
            }

            public void setFlu(FluBean flu) {
                this.flu = flu;
            }

            public SportBean getSport() {
                return sport;
            }

            public void setSport(SportBean sport) {
                this.sport = sport;
            }

            public TravBean getTrav() {
                return trav;
            }

            public void setTrav(TravBean trav) {
                this.trav = trav;
            }

            public UvBean getUv() {
                return uv;
            }

            public void setUv(UvBean uv) {
                this.uv = uv;
            }

            public static class AirBean {
                /**
                 * brf : 良
                 * txt : 气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class ComfBean {
                /**
                 * brf : 较不舒适
                 * txt : 白天虽然有雨,但仍无法削弱较高气温带来的暑意,同时降雨造成湿度加大会您感到有些闷热,不很舒适。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class CwBean {
                /**
                 * brf : 不宜
                 * txt : 不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class DrsgBean {
                /**
                 * brf : 炎热
                 * txt : 天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class FluBean {
                /**
                 * brf : 少发
                 * txt : 各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class SportBean {
                /**
                 * brf : 较不宜
                 * txt : 有降水,且风力较强,推荐您在室内进行低强度运动;若坚持户外运动,请选择避雨防风的地点。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class TravBean {
                /**
                 * brf : 较适宜
                 * txt : 有降水,气温较高,但风较大,能缓解湿热的感觉,还是适宜旅游,您仍可陶醉于大自然的美丽风光中。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }

            public static class UvBean {
                /**
                 * brf : 中等
                 * txt : 属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。
                 */

                private String brf;
                private String txt;

                public String getBrf() {
                    return brf;
                }

                public void setBrf(String brf) {
                    this.brf = brf;
                }

                public String getTxt() {
                    return txt;
                }

                public void setTxt(String txt) {
                    this.txt = txt;
                }
            }
        }
    }
}


接下来就是html页面ajax的使用,上代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
    <title>Document</title>
    <style type="text/css">
    *{text-align: center;}
    </style>
    <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>

</head>
<body>

    <h1 style="color: red">天气查询</h1>
    <br>
    
     <select name="city" id="city">
        <option value="选择" selected="selected">请选择</option>
        <option value="北京">北京</option>
        <option value="南京">南京</option>
        <option value="上海">上海</option>
        <option value="天津">天津</option>
        <option value="重庆">重庆</option>
        <option value="深圳">深圳</option>
     </select>
     <button id="search" type="button">查询</button>
    <br>
    <br>
    <p style="color: red">天气详情</p>
    <p id="result">大家好</p>

    <script >
        $("#search").click(function(){
            $.ajax({
                type:"GET",
                url:"http://127.0.0.1:9999/AjText/test.do?city="+$("#city").val(),
                dataType:"json",
                success:function(data){
                if(data){
                    $("#result").html("<span>城市:"+data.city+"</span><br><span>建议:"+data.suggestion+"</span><br>");
                }else{
                    alert("查询错误:"+data);
                }
                },
                error:function(jqXHR){
                    alert("未知查询错误");
                }
            });
        });
    </script>



    
</body>
</html>

其中success中data的参数就是后台返回的json数据

在编写的过程中遇到了跨域的问题:解决方案可以从前台进行修改,也可以改后台,我是改的后台。可以看到我servlet中多了这么一句:

resp.setHeader("Access-Control-Allow-Origin", "*"); 

来解决No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.这个错误的。

相关文章

  • Ajax的学习 异步刷新 以及错误No 'Access-Cont

    今天学习了ajax的异步刷新的使用我做了一个简单的天气查询刷新 大致如下图: 好的首先我们要找到天气的接口api我...

  • 2018 10 21

    学习jQuery下的ajax方法获取异步刷新数据

  • Ajax

    Ajax简介 通过AJAX (Asynchronous JAvaScript and XML) 实现异步刷新 用于...

  • jquery ajax

    Ajax(Asynchronous Javascript + XML)异步刷新起到了无可比拟的作用,以前写Ajax...

  • echarts的异步数据加载及更新

    echarts可以使用ajax实现异步刷新数据 //后台代码 前台代码

  • AJAX

    通过AJAX(Asynchronous JavaScript And XML)实现异步刷新,与服务器交换数据并更新...

  • 无标题文章

    ajax是异步javascript +xml的缩写,页面异步刷新。 json 是一种轻量级的数据交换格式,json...

  • dajngo实现ajax异步刷新

    前言 实现前后端分离,异步刷新 1.应用文件中配置路由urls.py 2.配置views.py 3.配置html ...

  • Ajax异步刷新技术

    应用场景 有的时候,我们需要让本次的响应内容和下一次响应的内容,同时展示给客户端。使用Ajax就可以在当前的网页显...

  • SpringMVC-Ajax

    ajax:异步刷新技术,可以在步刷新整个页面的前提下,刷新部分页面,节省资源 环境搭建:1、搭建好SpringMV...

网友评论

      本文标题:Ajax的学习 异步刷新 以及错误No 'Access-Cont

      本文链接:https://www.haomeiwen.com/subject/vkzdmftx.html