前端bug总结

一、ajax前台接受数据时,如果出现UncaughtReferenceError: data is not defined,要注意数据接受的格式问题:

如果是多对数据就是data[i].id,如果是一对就是data.id


1.1.1后台传递的数据格式是HashMap<String,String>,传输的是多组数据,即for()

//分类
    @RequestMapping(value = "genre/{moviegenres}", method = RequestMethod.GET)
    @ResponseBody
    public List<HashMap<String, String>> selectMoviesByGenre(@PathVariable String moviegenres){
        List<HashMap<String, String>> movies=new LinkedList<>();
        List genreMovies=movieService.getMovieByGenres(moviegenres);
        for (int i=0; i<genreMovies.size(); i++){
            Movie thisMovie=(Movie)genreMovies.get(i);
            HashMap<String, String> movie=new HashMap<>();
            movie.put("movieId", thisMovie.getMovieId());
            movie.put("movieTitle", thisMovie.getMovieTitle());
            movie.put("movieScore", String.valueOf(thisMovie.getMovieScore()));
            movie.put("moviePoster", thisMovie.getMoviePoster());
            movie.put("movieGenres", thisMovie.getMovieGenres());

            movies.add(movie);
        }
        return movies;
    }

1.1.2前台接受数据是多组数据,即for( data[i].id)

function getMovieType(moviegenres) {

        $.ajax({
            url: ip + '/movie/genre/' + moviegenres,
            type: 'GET',
            dataType: 'json',
            success: function(item) {
                //alert(item.length)
                $("#movieList_id").empty()
                var str = '';
                var i = 0;
                for (var i = 0; i < item.length; i++) {
                    //add=item[i].moviePoster.replace("../","");
                    str+='<div class="test">'+'<img src="'+item[i].moviePoster+'" style="max-width: 100%;height: 14.6875rem" />'+
                        '<span>'+item[i].movieScore+'</span><a href="movieDetail2.html?id='+item[i].movieId+'">详情</a></div>'
                }
                $("#movieList_id").append(str)
            },
            Error: function() {
                alert('请求出错');
            }

        });
    }

1.2.1后台传输数据格式是一组数据

//电影详情
    @RequestMapping("details/{movieId}")
    @ResponseBody
    public HashMap<String, String> getMovieDetails(@PathVariable String movieId){
        Movie movie=movieService.selectMovieById(movieId);
        HashMap<String, String > movieDetails=new HashMap<>();

        movieDetails.put("movieId", movieId);
        movieDetails.put("movieTitle", movie.getMovieTitle());
        movieDetails.put("movieGenres", movie.getMovieGenres());
        movieDetails.put("movieScore", String.valueOf(movie.getMovieScore()));
        movieDetails.put("moviePoster", movie.getMoviePoster());
        movieDetails.put("movieIntro", movie.getMovieIntro());

        return movieDetails;
    }

1.2.2前台接受的也是一组数据data.id

function getMovieDetail(movieId) {
				$.ajax({
					//url: ip + '/movie/movieDetail?movieId='+movieId,
					url: ip + '/movie/details/' +movieId,
					type: 'GET',
					dataType: 'json',
					async : false,
					success: function(data) {		
						showData(data); 	
					},
					Error: function() {
						alert('请求出错');
					}
				
				});	
			}
			function showData(data){
				var str="";
					//add=data.moviePoster.replace("../","");
					str="<img src='"+data.moviePoster+"' width='200'height='200' /><h2 class='major'>"+data.movieTitle+data.movieScore+"</h2><label>电影简介</label><p>"+data.movieIntro+"</p>"
					//str="<h2 class='major'>"+data.movieTitle+data.movieScore+"</h2><label>电影简介</label><p></p>"	
					$("#tab").append(str);
				
			}

1.3.1后台传输的数据格式HashMap<String, Object>,先前面是单个data,后面点开方法发现是list,故前面用data.movieid,后面用data.moviePoster[i].id

 //个人主页
    @RequestMapping(value = "userDetail", method = RequestMethod.GET)
    @ResponseBody
    public HashMap<String, Object> getUserDetails( HttpServletRequest request, HttpServletResponse response){
        HashMap<String, Object> userDetails=new HashMap<>();
        String userId=(String) request.getSession().getAttribute("USERNAME");
        User user=userService.selectUserById(userId);
        userDetails.put("userId", user.getUserId());
        userDetails.put("userName", user.getUserName());
        userDetails.put("userGender", user.getUserGender()==0?"男":"女");
        userDetails.put("userAge", user.getUserAge());
        userDetails.put("userOccu", user.getUserOccu());
        userDetails.put("userRecomMovies", userService.getUserRecom(userId));
        userDetails.put("userRatings", userService.getUserRatings(userId));

        return userDetails;
    }
public List<HashMap<String, String>> getUserRecom(String userId){
        String userRecom=userRecomDao.selectUserRecomById(userId).getMovieIdList();
        System.out.println("****************"+userId);
        String [] recomMovieIds=userRecom.split("::");
        List<HashMap<String, String>> recomMovies=new LinkedList<>();
        for (int i=0; i<10; i++){
            Movie movie=movieDao.selectMovieById(recomMovieIds[i]);
            HashMap<String, String> movieMap=new HashMap<>();
            movieMap.put("movieId", movie.getMovieId());
            movieMap.put("movieTitle", movie.getMovieTitle());
            movieMap.put("movieGenres", movie.getMovieGenres());
            movieMap.put("movieScore", String.valueOf(movie.getMovieScore()));
//前面是单个data,后面点开方法发现是list,故前面用data.movieid,后面用data.moviePoster[i].id
            movieMap.put("moviePoster", movie.getMoviePoster());
            movieMap.put("movieIntro", movie.getMovieIntro());

            recomMovies.add(movieMap);
        }

        return recomMovies;
    }

 

   public List<HashMap<String, String>> getUserRatings(String userId){
        List<HashMap<String, String>> ratingMovies=new LinkedList<>();
        List<Rating> ratings=ratingDao.selectRatingByUserId(userId);

        for (int i=0; i<ratings.size(); i++){
            Rating rating=ratings.get(i);
            HashMap<String, String> ratingMap=new HashMap<>();
            ratingMap.put("userId", rating.getUserId());
            ratingMap.put("movieId", rating.getMovieId());
            ratingMap.put("ratingScore", String.valueOf(rating.getRatingScore()));
            ratingMap.put("ratingTime", rating.getRatingTime());

            ratingMovies.add(ratingMap);
        }

        return ratingMovies;
    }

1.2.2前台接受的先前面是单个data,后面点开方法发现是list,故前面用data.movieid,后面用data.moviePoster[i].id

function getUserDetail(){
		$.ajax({
			url: ip + '/user/userDetail',
			type: 'GET',
			dataType: 'json',
			async : false,//同步 当执行当前AJAX的时候会停止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。
			success: function(data) {
				showData(data); //我们仅做数据展示
			},
			Error: function() {
				alert('请求出错');
			}
		});
	}
	//展示数据
	function showData(data) {
		var userStr = ""; //定义用于拼接的字符串
		var movieStr="";
			userStr="<p>昵称:"+data.userName+"</p><p>性别:"+data.userGender+"</p><p>职业:"+data.userOccu+"</p>"
		 	$("#utab").append(userStr);

        for(var i=0;i<data.userRecomMovies.length;i++){
            //alert(data.userRecomMovies[i].movieTitle)
            movieStr = "<tr><td>" + data.userRecomMovies[i].movieTitle + "</td><td>" + data.userRecomMovies[i].movieScore +"</td><td>" + " <button type='button' onClick='jump("+data.userRecomMovies[i].movieId+")'>Learn More</button>"+"</td></tr>"
            $("#tab").append(movieStr);
		}
	}

二、前台传多个参数,且参数之间通过/隔开

http://localhost:8889/movie/movieRating/1830/5(其中1830和5均是参数)

 @RequestMapping("movieRating/{movieId}/{ratingScore}")
    @ResponseBody
    public Result<Integer, Object> movieRating(@PathVariable String movieId, @PathVariable int ratingScore,
                                               HttpServletResponse response, HttpServletRequest request){

        Rating rating =new Rating();
        rating.setUserId((String) request.getSession().getAttribute("USERNAME"));
        rating.setMovieId(movieId);
        rating.setRatingScore(ratingScore);
        rating.setRatingComment(null);
        rating.setRatingTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        ratingService.insertRating(rating);
        System.out.println("###############"+rating.getRatingTime());

        return new Result<>(200, "评分成功!");
    }

前台接受地址映射

//http://localhost:8889/movie/movieRating/1830/5
			function sendRate(movieId,movieRating) {
				alert(movieId);
				alert(movieRating);
				$.ajax({
					url: ip + '/movie/movieRating/'+movieId+'/'+movieRating,
					//url:"DataSourceCheck/refreshDataSource?dataSourceId=666",
					//url: ip + '/movie/movieRating/',
					type: 'GET',
					//data: "{movieId:'" + movieId + "'/movieRating:'" + movieRating + "'}", 
					dataType: 'json',
					//async : false,
					success: function(res) {
						alert("hhh")
						if(res.status==200)	{
							alert("评分成功")	
						}		
					},
					Error: function() {
						alert('请求出错');
					}
				
				});	
			}

三、http://www.mobanwang.com/ 模板王免费模板

四、Uncaught ReferenceError: $ is not defined 问题原因分析总结及问题解决寻找位置(原因js出错)

1.引用js路径错误 一般这个需要再html或jsp中寻找  位置如下:

或者使用在线js

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script>

2、js中书写错误  

包含不局限  方法上下不匹配  参数错误  值传递未接收等

五、前端页面之间的传参和接收

传参

<a href="movieDetail2.html?id='+item[i].movieId+'">详情</a>

接参

<script>
function getQueryVariable(variable)
			{
			       var query = window.location.search.substring(1);
			       var vars = query.split("&");
			       for (var i=0;i<vars.length;i++) {
			               var pair = vars[i].split("=");
			               if(pair[0] == variable){return pair[1];}
			       }
			       
			}


var movieId=getQueryVariable("id")//参数已经传递在movieId中了
</script>

六、在前端如何接收ajax传递来的数据并展示

6.1带图片的

function getMovieDetail(movieId) {
				$.ajax({
					//url: ip + '/movie/movieDetail?movieId='+movieId,
					url: ip + '/movie/details/' +movieId,
					type: 'GET',
					dataType: 'json',
					async : false,
					success: function(data) {		
						showData(data); 	//展示数据
					},
					Error: function() {
						alert('请求出错');
					}
				
				});	
			}

//展示数据,带图片的
			function showData(data){
				var str="";
				
					// alert(data.moviePoster)
					// alert(data.movieTitle)
					// alert(data.movieScore)
					// alert(data.movieIntro)
					
					add=data.moviePoster.replace("../","");
					str="<img src='"+add+"' width='200'height='200' /><h2 class='major'>"+data.movieTitle+data.movieScore+"</h2><label>电影简介</label><p>"+data.movieIntro+"</p>"	
					//str="<h2 class='major'>"+data.movieTitle+data.movieScore+"</h2><label>电影简介</label><p></p>"	
					$("#tab").append(str);
				
			}

6.2表格展示的

		//展示数据
		function showData(data) {
			var str = ""; //定义用于拼接的字符串
			for (var i = 0; i < data.length; i++) {
				//拼接表格的行和列
				str = "<tr><td>" + data[i].movieTitle + "</td><td>" + data[i].movieScore +"</td><td>" + " <a href='movieDetail2.html?id="+data[i].movieId+"'>LearnMore</a></td></tr>"
				//追加到table中
				//alert(data[i].movieId)
				$("#tab").append(str);
			}
		}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《阿里前端开发规范文档.pdf》是阿里巴巴公司针对前端开发制定的一份规范文档。该文档的目的是为了统一前端团队的开发风格和编码规范,提高代码的可读性、可维护性和可扩展性。 该规范文档主要包含了以下几个方面的内容: 1. HTML规范:阐述了HTML代码的书写规范,包括标签的使用、属性的命名、嵌套规则等。通过规范的HTML代码可以提高页面的可访问性和搜索引擎的友好性。 2. CSS规范:规范了CSS代码的书写方式和命名规则,包括选择器的使用、样式的命名、布局的处理等。规范的CSS代码可以提高页面的渲染效率和样式的复用性。 3. JavaScript规范:规范了JavaScript代码的书写方式和命名规则,包括变量的声明、函数的定义、条件语句的使用等。规范的JavaScript代码可以提高代码的执行效率和调试的便捷性。 4. 图片规范:介绍了图片在前端开发中的使用规范,包括图片格式的选择、图片大小的优化、图片的懒加载等。规范的图片处理可以提高页面的加载速度和用户的体验。 5. 组件规范:规范了前端开发中常用组件的开发方式和使用规则,包括轮播图、模态框、下拉菜单等。规范的组件开发可以提高开发效率和代码的复用性。 通过遵守该规范文档,前端开发人员可以减少代码冗余、降低维护成本,并且方便团队协作和交流。同时,该规范文档也采用了阿里巴巴内部开发实践的经验,提供了一些最佳实践和技术指导,有助于提高项目的质量和成功的几率。 总之,《阿里前端开发规范文档.pdf》是一份非常有价值的前端开发参考文档,可以帮助前端开发人员更好地理解和遵守编码规范,提高项目的开发质量和团队的协作效率。 ### 回答2: 阿里前端开发规范文档.pdf 是阿里巴巴公司针对前端开发人员制定的一份规范文档,旨在统一前端开发团队的代码风格和开发规范,提升代码的可维护性和可读性。 该文档主要包括以下几个方面的内容: 1. HTML/CSS规范:包括HTML代码结构、命名规范、CSS类命名规范等。通过规范化的命名及代码结构,使得团队成员之间能够更加容易地协作和理解代码。 2. JavaScript规范:包括JavaScript代码书写规范、命名规范、代码格式化规范等。规范的代码书写风格可以提高代码的可读性,并且减少了一些常见的错误。 3. 图片/文件规范:包括图片优化规范、文件命名规范等。通过规范化的命名和优化,可以提升网站的加载速度,减少对网络带宽的占用。 4. 工程目录结构规范:包括前端项目的文件目录结构规范、模板文件的组织规范等。规范的目录结构可以使得项目更加易于维护和扩展。 5. Git提交规范:规定了Git提交的消息格式和命名规范,以及分支管理的规范。通过规范的提交消息和分支管理,可以方便团队成员协作开发。 该文档是阿里巴巴前端开发团队多年经验总结的产物,经过实践证明是一份行之有效的规范文档。阿里前端开发规范文档.pdf不仅提供了代码规范,更是一本指导开发的手册,可以帮助前端开发人员快速上手项目,减少摸索的时间。 总之,阿里前端开发规范文档.pdf 是一份对于前端开发团队非常有价值的规范文档,可以提高代码质量、项目可维护性和团队协作效率。 ### 回答3: 《阿里前端开发规范文档.pdf》是阿里巴巴公司的前端开发团队为了统一前端开发规范而编写的一份文档。 这份文档主要包括以下几个方面的内容: 1. 命名规范:文档中会介绍如何命名变量、函数、文件等,以确保代码的可读性和一致性。通过采用统一的命名规范,可以提高团队合作效率,简化代码维护的复杂度。 2. HTML/CSS规范:文档中会介绍HTML和CSS的书写规范,包括标签的使用、属性的命名、代码的缩进等等。这些规范可以使页面结构清晰,样式统一,提高网站的可维护性和可扩展性。 3. JavaScript规范:文档中会介绍JavaScript的编码规范,包括变量的声明、函数的使用、错误处理等。这些规范可以提高代码的质量,减少BUG的产生,并且使代码易于理解和维护。 4. 组件规范:文档中会介绍如何编写可复用的前端组件,包括组件的命名、结构的设计、样式的封装等。通过使用规范的组件,可以减少重复的代码量,提高开发效率。 5. 版本控制规范:文档中会介绍如何使用版本控制工具,如Git,来管理前端项目的代码。通过使用版本控制规范,可以方便地进行代码的备份、协作和回滚,提高项目的开发效率和代码的可靠性。 总之,《阿里前端开发规范文档.pdf》是一份非常重要的文档,对于前端开发者来说,遵循这些规范能够提高代码的质量和可维护性,同时也能够加强团队之间的协作和沟通。因此,我们应该认真学习并应用这些规范,使自己的前端开发水平更上一层楼。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值