【问题标题】:JSON from Servlet to Ajax to HTML - no error messageJSON 从 Servlet 到 Ajax 到 HTML - 没有错误消息
【发布时间】:2015-04-22 04:12:04
【问题描述】:

我刚刚完成这个项目。我有一个 JSON 字符串

{"data":{"id":"YPekRdk","title":null,"description":null,"datetime":1429674575,"type":"image\/png","animated":false,"width":600,"height":200,"size":85694,"views":0,"bandwidth":0,"vote":null,"favorite":false,"nsfw":null,"section":null,"account_url":null,"account_id":0,"deletehash":"AZi041RwarCFD3I","name":"","link":"http:\/\/i.imgur.com\/YPekRdk.png"},"success":true,"status":200}

我从我的 servlet 发送它

response.getWriter().write(new Gson().toJson(imgurImageJson));

到我的 ajax

$(document).ready(function () {
    $('#button').click(function () {
        var array1 = [];

        $('#sortable2 .selectedItemImg').each(function () {
            array1.push($(this).attr('src'));
        });

        $.ajax({
            url: 'generate',
            type: 'POST',
            contentType: 'text/plain',
            dataType: 'html',
            data: array1.join('\n'),

            success: function (data) {
                $.each(JSON.parse(data), function (listID, mapData) {
                    $("#displayGeneratedURL").append("<p>" + mapData.id + "</p>");
                });
            }
        });
    });
    return false;
});

并尝试在我的 jsp 上查看它

#displayGeneratedURL{
            color:  white; font-family: Geneva,Tahoma,Verdana,sans-serif; font-size: 12px;
        }

<div id="displayGeneratedURL">Result should be here somewhere</div>

我收到了一条浏览器消息:

Uncaught SyntaxError: Unexpected token <

我将我的数据类型更改为 application/json 和其他一些内容,但该错误消息消失了,而是什么都没有发生(作为屏幕或控制台的输出)。

我正在使用的代码主要是从我与另一个 servlet 一起使用的工作代码中复制而来的,但是在带有该 json 字符串的 Gson 调用中使用它仍然可能不合适/错误,但我不知道。也可能是我在ajax中的函数完全错误。

你能看出哪里不对吗?

更新:

我尝试将 servlet 响应更改为

response.getWriter().write(imgurImageJson);

数据类型为dataType: 'text/html',仍然没有显示任何内容,也没有错误消息(当数据类型仅保留为文本时,这会出现 > 错误)

更新:我把我的 ajax 函数改成了这个

success: function (data) {
    alert("Hello");
}

它不会发出警告框或做任何事情

我的控制台图像在这里

http://i.stack.imgur.com/IZivJ.jpg

(额外的普通链接,否则它会变得非常小)

更新:

这是我的开发者控制台 POST 响应

编辑:这是我的完整 servlet 代码(非常混乱):

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mainClasses;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
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 static jdk.nashorn.internal.objects.NativeDebug.getContext;

/**
 *
 * @author J
 */
@WebServlet(name = "ImageGenerationServlet", urlPatterns = { "/generate" })
public class ImageGenerationServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request
     *            servlet request
     * @param response
     *            servlet response
     * @throws ServletException
     *             if a servlet-specific error occurs
     * @throws IOException
     *             if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ImageGenerationServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet ImageGenerationServlet at "
                    + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <editor-fold defaultstate="collapsed"
    // desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request
     *            servlet request
     * @param response
     *            servlet response
     * @throws ServletException
     *             if a servlet-specific error occurs
     * @throws IOException
     *             if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request
     *            servlet request
     * @param response
     *            servlet response
     * @throws ServletException
     *             if a servlet-specific error occurs
     * @throws IOException
     *             if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);

        // List imageList = Arrays.asList(request.getParameter("button"));
        //
        // System.out.println(imageList);
        //
        // ArrayList <String> imageURLs = new
        // ArrayList(Arrays.asList(imageList));
        //
        // System.out.println(imageURLs);
        // ArrayList <String> imageURLs = new
        // ArrayList(request.getParameter("button"));
        // String postResponse = request.getParameter("button");
        // ArrayList<Map> imageMap = new ArrayList<Map>();
        // String[] urls1 = postResponse.split(",");
        // ImageController.controlImage(urls1);
        List<String> imageURLs = new ArrayList<String>();
        try {
            BufferedReader reader = request.getReader();
            String line;
            do {
                line = reader.readLine();

                                if (line !=null){
                imageURLs.add(line);
                                }

            } while (line != null);
        } catch (Exception e) {
        }
        ;

        try {
            // int size = imageURLs.length();

            // Our steps are:
            // 1) Retrieve array of image srcs from our jsp via jquery and parse
            // to string array.
            // 2) Process the array in ImageController to create composite
            // image, upload to local server
            // and return local image url.
            // 3) Transfer the image to imgur by sending our local image url to
            // the imgur API.
            // Retrieve the image's new imgur url in json string.
            // 4) Parse the string so that we have just the url in json format.
            // 5) Send this back to our jsp via jquery and print to screen.
            ImageController imageController = new ImageController();

            String filePath = imageController.controlImage((ArrayList<String>) imageURLs);

                        System.out.println(filePath);

            // String generatedImageFilePath =
            // ImageController.controlImage((ArrayList<String>) imageURLs);
            // UploadController uploadController = new UploadController();
            String imgurImageJson = UploadController.getImgurContent(filePath);



//                 response.setContentType("json");
        response.setCharacterEncoding("UTF-8");

//                 response.getWriter().write("hello");
                response.getWriter().write(new Gson().toJson(imgurImageJson));

//                response.getWriter().write(new Gson().toJson(imgurImageJson));

//                        System.out.println(imgurImageJson);
//
//          Scanner file = new Scanner("imgurImageJson.json");
//          String imgurImageJsonSample = file.nextLine();
//          file.close();
//
//          JsonParser parser = new JsonParser();
//          JsonObject obj = parser.parse(imgurImageJsonSample)
//                  .getAsJsonObject();
//          String imgurl = obj.get("link").toString();
//          System.out.println(imgurl);

            // uploadedImageJson
            // 1) retrieve array of urls
            // 2) send to imagegenerationcontroller
            // 3) send to uploadcontroller
            // 4) retrieve and parse the json response to get the imgur url
            // 5) response from here to user
        } catch (Exception ex) {
            Logger.getLogger(ImageGenerationServlet.class.getName()).log(
                    Level.SEVERE, null, ex);
        }

    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

【问题讨论】:

  • 仅供参考,如果您的内容类型是application/json,那么您不需要解析它,否则您应该解析它。同时使用浏览器开发工具检查服务器发送的响应
  • 感谢您的回复。我在显示我的开发人员日志的图像中进行了编辑。我将我的代码(如图所示)更改为仅发出警报,但不会触发。
  • 该图像显示 404 响应。你的 servlet 网址是什么?鉴于您的成功函数根本没有触发并看到 404 响应,您确定 Servlet 端没有发生错误吗?
  • 请向我们展示来自开发者工具的网络选项卡的请求和响应,而不是控制台。
  • 我想我找到了答案,我在 servlet 的 getPost 方法开始时调用了processRequest(request, response);。生病继续工作,然后确认。非常感谢您的帮助 CERLIN 老板

标签: jquery ajax json servlets


【解决方案1】:

我发现我的 servlet 的 getPost() 方法正在调用我的 servlet 的 processResquest() 方法。

我有一种感觉,默认情况下调用是在那里生成的,我忘记在几天前第一次创建 servlet 时将其注释掉/删除。

感谢 Cerlin Boss,他向我展示了如何通过单击浏览器开发人员控制台中的 POST 实例来查看正在创建的实际 POST 响应,并感谢 Ramp

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2020-03-20
    相关资源
    最近更新 更多