从UTF-8字符集中的Java servlet接收JSON数组响应

时间:2017-08-18 08:32:36

标签: java json ajax servlets utf-8

我正在对java servlet进行ajax调用。 servlet以JSON数组响应,字符集设置为UTF-8。但是,一旦我在AJAX调用中得到响应,我得到???我的字符串中的字符。我经历了大量的测试和研究,找不到可能的解决方案。

AJAX CALL:

                  $.ajax({
                    type: 'POST',
                    data: {curTableName: curTableName,curTableID: curTableID},
                    dataType: 'json',
                    url: '../ShowProducts',
                    success: function(productInfo){ 
                       var noOfProducts = productInfo.length;
                        for(var i = 0; i < noOfProducts; i++)
                        {
                            product.push(productInfo[i].product.substr(0,25) + "...");
                            webshop.push(productInfo[i].webshop);
                            price.push(productInfo[i].price);
                            availability.push(productInfo[i].availability);
                            lastChecked.push(productInfo[i].lastChecked);
                            checkFreq.push(productInfo[i].checkFreq);
                            url.push(productInfo[i].url);
 DisplayProductInfo(product[i],webshop[i],price[i],availability[i],lastChecked[i],checkFreq[i],url[i]);
                        }
                    }   
                });

我的Java Servlet响应:

            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(jsonArr.toString());

根据我自己的研究,java servlet似乎是正确的,也许javascript存在问题。任何人都有任何好主意。非常感谢所有帮助。 :)

1 个答案:

答案 0 :(得分:0)

我设法让它发挥作用。问题在于JSON需要在servlet中编码,并在javascript中解码。谢谢 - 是的。

代码更改:

AJAX CALL:

     $.ajax({
                    type: 'POST',
                    data: {curTableName: curTableName,curTableID: curTableID},
                    dataType: 'json',
                    url: '../ShowProducts',
                    success: function(productInfo){ 
                       var noOfProducts = productInfo.length;
                        for(var i = 0; i < noOfProducts; i++)
                        {
                            productInfo[i].product = decodeURIComponent(productInfo[i].product);
                            productInfo[i].product = productInfo[i].product.replace(/\+/g, ' ');
                            product.push(productInfo[i].product.substr(0,25) + "...");
                            webshop.push(productInfo[i].webshop);
                            price.push(productInfo[i].price);
                            availability.push(productInfo[i].availability);
                            lastChecked.push(productInfo[i].lastChecked);
                            checkFreq.push(productInfo[i].checkFreq);
                            url.push(productInfo[i].url);
 DisplayProductInfo(product[i],webshop[i],price[i],availability[i],lastChecked[i],checkFreq[i],url[i]);
                        }
                    }   
                }); 

JAVA SERVLET:

productSplit[0] = URLEncoder.encode( productSplit[0], "UTF-8");

Java servlet中添加了附加行。现在标题被编码,然后才转到JSON对象。