Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从servlet返回JSON_Jquery_Json_Internet Explorer_Jakarta Ee_Servlets - Fatal编程技术网

Jquery 从servlet返回JSON

Jquery 从servlet返回JSON,jquery,json,internet-explorer,jakarta-ee,servlets,Jquery,Json,Internet Explorer,Jakarta Ee,Servlets,这是一个非常基本的请求-响应测试。浏览器使用jQuery$.ajaxapi将“hello from Browser”发送给servlet,servlet接收该消息,然后使用org.JSON.simple库创建一个JSON对象,并向浏览器发送一个JSON响应,其中包含消息“hello from server” 我在本地主机上运行这个,假设我的IP地址是123.123.12.123,平台是Ubuntu,服务器是Tomcat6.0,运行在EclipseIDE中 测试1。我从Eclipse启动服务器,打

这是一个非常基本的请求-响应测试。浏览器使用jQuery$.ajaxapi将“hello from Browser”发送给servlet,servlet接收该消息,然后使用org.JSON.simple库创建一个JSON对象,并向浏览器发送一个JSON响应,其中包含消息“hello from server”

我在本地主机上运行这个,假设我的IP地址是123.123.12.123,平台是Ubuntu,服务器是Tomcat6.0,运行在EclipseIDE中

测试1。我从Eclipse启动服务器,打开Firefox,输入,我可以看到servlet接收消息,浏览器接收响应,测试通过

测试2。服务器仍在Ubuntu的Eclipse上运行,我从VirtualBox启动Windows 7来宾计算机,在Windows 7中启动Firefox浏览器,输入,按我预期的方式工作,测试通过

测试3。服务器仍在运行在Eclipse的Ubuntu上,打开InternetExplorer9浏览器,给它地址,什么也没发生。 调试给了我

响应HTTP/1.1200正常

响应正文{“消息”:“来自服务器的你好”}

jsp是

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Insert title here</title> </head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript"></script> <script type="text/javascript" src="release/js/libs/json2.js"></script> <script> $(document).ready(function(){ var request = ({"message":'Hello from browser'}); var jsonobj=JSON.stringify(request); $.ajax({ data: {para:jsonobj}, dataType: 'json', url: './TestServlet', type: 'POST', success: function(jsonObj){ alert(jsonObj.message); }, error: function() { alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.status + ' ' + err); } }); }); </script> <body> </body> </html> 在此处插入标题 $(文档).ready(函数(){ var请求=({“消息”:“来自浏览器的你好”}); var jsonobj=JSON.stringify(请求); $.ajax({ 数据:{para:jsonobj}, 数据类型:“json”, url:“./TestServlet”, 键入:“POST”, 成功:函数(jsonObj){ 警报(jsonObj.message); }, 错误:函数(){ 警报('Ajax readyState:'+xhr.readyState+'\n状态:'+xhr.status+'+err); } }); }); servlet代码是

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.simple.JSONObject; import org.json.simple.JSONValue; /** * Servlet implementation class TestServlet */ public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf8"); response.setCharacterEncoding("utf8"); response.setContentType("application/json"); PrintWriter out = response.getWriter(); JSONObject jsonObj = (JSONObject) JSONValue.parse(request.getParameter("para")); System.out.println(jsonObj.get("message")); JSONObject obj = new JSONObject(); obj.put("message", "hello from server"); out.print(obj); } } 导入java.io.IOException; 导入java.io.PrintWriter; 导入javax.servlet.ServletException; 导入javax.servlet.http.HttpServlet; 导入javax.servlet.http.HttpServletRequest; 导入javax.servlet.http.HttpServletResponse; 导入org.json.simple.JSONObject; 导入org.json.simple.JSONValue; /** *Servlet实现类TestServlet */ 公共类TestServlet扩展了HttpServlet{ 私有静态最终长serialVersionUID=1L; /** *@参见HttpServlet#HttpServlet() */ 公共TestServlet(){ 超级(); } /** *@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应) */ 受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{ //TODO自动生成的方法存根 } /** *@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应) */ 受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{ setCharacterEncoding(“utf8”); 响应.setCharacterEncoding(“utf8”); setContentType(“应用程序/json”); PrintWriter out=response.getWriter(); JSONObject jsonObj=(JSONObject)JSONValue.parse(request.getParameter(“para”); System.out.println(jsonObj.get(“消息”); JSONObject obj=新的JSONObject(); obj.put(“消息”,“来自服务器的你好”); 打印输出(obj); } } 更新:

通过改变仔细观察之后

error: function() { alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.status + ' ' + err); } 错误:函数(){ 警报('Ajax readyState:'+xhr.readyState+'\n状态:'+xhr.status+'+err); } 到

错误:函数(xhr,err){ 警报('Ajax readyState:'+xhr.readyState+'\n状态:'+xhr.status+'+err); } 我得到了警报readyState:0和状态:0。 但我可以在响应体和 响应头是

Key Value Response HTTP/1.1 200 OK 关键值 响应HTTP/1.1200正常
IE积极地缓存AJAX请求(无论如何比Firefox、Chrome和Safari更有效)。 有时您需要在请求时设置缓存头控制器。如
缓存:false
。我试图像这样修复你的代码

request.setCharacterEncoding("utf8");
        //response.setCharacterEncoding("utf8");
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        JSONObject jsonObj = (JSONObject) JSONValue.parse(request.getParameter("para"));
        System.out.println(jsonObj.get("message"));
        JSONObject obj = new JSONObject();
        obj.put("message", "hello from server");
        out.print(obj.toString());

我将您的响应内容类型从
application/json;charset=utf8
到application/json就行了。

我也遇到了同样的问题。它在Firefox上运行得很好,但在IE上却不行。。。 我在读这篇文章时发现我的问题与“内容类型”有关。问题似乎是IE的“charset=UTF8”有问题。但是,如果您使用“charset=UTF-8”(带破折号),那么它就可以工作了!
然后,您的内容类型应该是:application/json;charset=UTF-8

使用Gson可以发送json响应

@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("utf-8");
    Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
    Subject subject1 = new Subject(1, "Computer Fundamentals");
    Subject subject2 = new Subject(2, "Computer Graphics");
    Subject subject3 = new Subject(3, "Data Structures");
    Set subjects = new HashSet();
    subjects.add(subject1);
    subjects.add(subject2);
    subjects.add(subject3);
    student.setSubjects(subjects);
    Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
    student.setAddress(address);
    Gson gson = new Gson();
    String jsonData = gson.toJson(student);
    PrintWriter out = response.getWriter();
    try {
        out.println(jsonData);
    } finally {
        out.close();
    }

}
}

有关更多信息


脚本:
$(文档).ready(函数(){
$.get('jsontest.jsp',函数(数据){
[在此输入图像描述][1]console.log(数据);
});
});

您的问题是什么。。?我仍然对你的问题感到困惑…你能用简单的语言告诉我吗…?对不起,问题太长了。使用上面的代码(test.jsp和TestServlet)。测试3失败。但是测试1和2通过了。很抱歉反应太晚,它成功了,谢谢。你能解释一下它背后的原因吗?当使用httpRequest IE的请求和响应被缓存头并且头不被更新时。请查看此链接以了解详细信息好的,在那篇文章中,Ajax在第一次加载时工作正常,但在加载之后就不行了。但我的问题是Ajax响应在IE上根本不起作用。另外,response.setCharacterEncoding(“utf8”);是否与响应缓存头相关?谢谢,我想当$.ajax在IE中使用字符集(“utf8”)获取响应时会有任何问题。但IE也有可能。
@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("utf-8");
    Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
    Subject subject1 = new Subject(1, "Computer Fundamentals");
    Subject subject2 = new Subject(2, "Computer Graphics");
    Subject subject3 = new Subject(3, "Data Structures");
    Set subjects = new HashSet();
    subjects.add(subject1);
    subjects.add(subject2);
    subjects.add(subject3);
    student.setSubjects(subjects);
    Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
    student.setAddress(address);
    Gson gson = new Gson();
    String jsonData = gson.toJson(student);
    PrintWriter out = response.getWriter();
    try {
        out.println(jsonData);
    } finally {
        out.close();
    }

}
<% 
     Gson gs = new Gson();
     BeanHelpBH bh = new BeanHelpBH();
     List<Baihatmoi> lst = bh.getTenbaihatbyName("Ao moi ca mau");
    String bha = gs.toJson(lst);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    out.print(bha);
    out.flush();


%>

  script : 
        <script>
             $(document).ready(function(){
               $.get('jsontest.jsp',function(data){
            [enter image description here][1] console.log(data);

              });

           });
        </script>