定义全局变量json,再调用getServerJson()函数给json赋值后,打印不出所赋的值?
来源:2-8 自由编程
棉花糖阿水
2019-09-17 20:29:25
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>职员列表</title> <style> td{ width: 400px; text-align: center; margin: 0; padding: 0px; background-color: #cfcfcf; } td:hover{ border-color: red; } .list{ } </style> </head> <body> <table class="list" align="center" border="1" > <tr> <td id="c1">员工列表 </td> <td id="c2">职位列表</td> <td id="c3">部门列表</td> </tr> </table> <div id="info"></div> <script type="text/javascript" src="js/jquery-3.4.1.js"></script> <script type="text/javascript"> //定义一个全局变量用来接收JSON数据 var json; //获取服务器响应的文本 function getServerJson() { //创建XmlHttpRequest对象 var xmlHttp; if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); } else{ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } console.log(xmlHttp); //创建Ajax请求 xmlHttp.open("GET","/ajax/company",true); //发送到服务器 xmlHttp.send(); //处理服务器响应 xmlHttp.onreadystatechange=function(){ //响应已被接收并且服务器处理成功时才执行 if(xmlHttp.readyState == 4 && xmlHttp.status == 200){ //获取响应体的文本 var responseText = xmlHttp.responseText; //对服务器结果进行处理 console.log(responseText); json = JSON.parse(responseText); console.log(json); } } } console.log("json=" + json); $("td[id='c1']").on("click",function(){ getServerJson(); console.log(json); var html = ""; for (var i = 0; i < json.length; i++) { var employee = json[i]; html= employee.name + "<br>" } document.getElementById("info").innerHTML = html; }); </script> </body> </html>
package com.imooc.ajax; public class Employee { private String name; private String department; private String job; public Employee(String name, String department, String job) { this.name = name; this.department = department; this.job = job; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } }
package com.imooc.ajax; import java.io.IOException; import java.util.ArrayList; 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; import com.alibaba.fastjson.JSON; /** * Servlet implementation class CompanyContent */ @WebServlet("/company") public class CompanyContent extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CompanyContent() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Employee> emploList = new ArrayList<Employee>(); Employee e1 = new Employee("小红", "销售部", "职员"); Employee e2 = new Employee("小明", "研发部", "职员"); Employee e3 = new Employee("小强", "人事部", "经理"); emploList.add(e1); emploList.add(e2); emploList.add(e3); String json = JSON.toJSONString(emploList); System.out.println(json); response.setContentType("text/html;charset=utf-8"); response.getWriter().println(json); } }
1回答
同学你好!
报错的原因是因为,同学在方法中调用了ajax的方法,由于被调用的方法是ajax,这里还没有等ajax执行完,getServerJson();后面的方法就开始执行了,因此json为没有定义。同学第二次点击时就正常了。另外将ajax改为同步,发现也是不可以的。因此不建议同学将ajax单独封装一个函数来进行调用。可以在点击事件中直接执行ajax方法。
同学在给html赋值时应该进行字符串的拼接,而不是直接使用=,这样会导致html的结果只有最后一次循环的值
如果过我的回答解决了你的疑惑,请采纳,祝学习愉快~
相似问题
回答 1