【问题标题】:Get error on sending JSON from JavaScript to Java将 JSON 从 JavaScript 发送到 Java 时出错
【发布时间】:2014-05-22 09:04:28
【问题描述】:

我想借助 JSON 将一些数据从 JavaScript 发送到 Java servlet。但我有问题。

这是我的 JavaSript 代码:

var myData = {"someNumber":34,"someDate":"May 22, 2014 12:00:00 AM","expiryDate":"May 29, 2014 12:00:00 AM","anotherNumber":3,"customerNumber":56,"name":"John Dow","type":"notype","someSize":"XXL","noMonth":11,"notes":"some notes here","colour":"Black"};
$.ajax({
            url :           "customerAdd",
            type:           "get",
            data:           {"myData" : JSON.stringify(myData)},
            contentType:    "application/json; charset=utf-8",
            dataType:       "json",
            async:          false,
            success:        function(msg) {
                alert(msg);
            },
            error:          function(jqXHR, textStatus, errorThrown) {
                console.log("jqXHR: " + textStatus);
                console.log("textStatus: " + textStatus);
                console.log("errorThrown: " + errorThrown);
            }
        });

这是我的 Java 代码:

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{    
        Gson gson = new GsonBuilder().create();
        Customer customer = gson.fromJson(request.getParameter("myData"), Customer.class);
        System.out.println(customer.toString());
    }

结果我在 JavaScript 中得到一个错误:

"textStatus: parsererror"
"errorThrown: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data"

我的代码有什么问题?

附: 我通过这种方式在 JavaScript 中创建 myData:

var myData = {  
                someNumber:    + $("#someNumber").val(),
                someDate:       $("#someDate").val(),
                expiryDate:     $("#expiryDate").val(),
                anotherNumber:      + $("#anotherNumber").val(),
                customerNumber: + $("#customerNumber").val(),
                name:           $("#name").val(),
                type:           $("#type").val(),
                someSize:        $("#someSize").val(),
                noMonth:        + $("#noMonth").val(),
                notes:          $("#notes").val(),
                colour:         $("#colour").val() };

【问题讨论】:

    标签: java javascript jquery json servlets


    【解决方案1】:

    这是一个 JSON.stringify 示例:

    JSON.stringify({x: 5, y: 6}); // '{"x":5,"y":6}'
    

    您应该删除参数名称上的引号,或者可以使用 javascript 对象。

    你应该这样创建你的对象:

    var myData = new Object();
    mydata.someNumber = $("#someNumber").val();
    ...
    

    编辑:

    您似乎试图在 ajax 调用中获得响应,但您的 java 代码没有响应任何内容,也许您可​​以尝试调试它。并尝试查看是否触发了java代码?

    【讨论】:

    • 我已经按照你的建议创建了我的对象,但不幸的是我收到了同样的错误。
    • 新编辑:如果你的java代码被触发,你应该尝试删除成功函数原型中的msg属性
    • 我删除了 msg 属性,但没有帮助。我的 java 代码没有任何响应。但是java代码正确解析接收到的JSON数据并且System.out.println(customer.toString());没有任何错误。
    【解决方案2】:

    可以试试

    JSON.stringify({ "myData" : myData })
    

    【讨论】:

    • 假设你的 myData 对象是有效的,我认为你应该能够做到这一点: $.ajax({ url : "customerAdd", type: "get", data: JSON.stringify({ " myData": myData }) 等
    • 当你创建你的 myData 对象时,有些值有 + 而有些没有,你需要这些吗?
    • 我添加了 + 来生成数值。我已删除 + 但它没有帮助。我收到了同样的错误。
    • 您是否尝试将数据:{"myData" : JSON.stringify(myData)} 更改为数据:JSON.stringify({"myData": myData}),
    • 我将数据更改为data:JSON.stringify({"myData" : myData})。结果我认为 GET 请求不正确 http://localhost:8080/customerAdd?{%22myData%22:{%22magicNumber%22:%2234%22,%22someDate%22:%22May%2022,...}} 现在我收到另一个错误:errorThrown: Internal Server Error
    【解决方案3】:

    我发现了我的错误。我不应该放

    dataType: "json",
    

    $.ajax 中的属性,因为我不希望 JSON 数据从服务器返回。 我刚刚删除了它。

    感谢 Lee Bee 和 Tony 的建议。

    【讨论】:

      【解决方案4】:

      如果 servlet 方法没有向 ajax 返回任何 json 内容,请删除

      dataType: "json",来自 javascript 中的 ajax 调用。

      【讨论】:

        猜你喜欢
        • 2014-06-26
        • 2012-02-24
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多