我尝试使用json
对象从数据库中检索数据。但是当我调用servlet时,Jquery将返回SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
此错误仅在响应包含更多数据时显示。
我的脚本是:
$.ajax({
type: "GET",
url: "VComment",
data:'comm='+encodeURIComponent(comm)+'&'+'data-id='+encodeURIComponent(dataid)+'&'+'data-alid='+encodeURIComponent(dataalid),
dataType: "json",
success: function( data, textStatus, jqXHR)
{
if(data.success)
{
var newcommhtml = '<div id="c0'+thecid+'" class="cnew clearfix"> <section class="c-author">';
newcommhtml = newcommhtml + '<h3>Anonymous</h3>';
newcommhtml = newcommhtml + '<span class="pubdate">'+month+' '+day+', '+year+'</span> </section>';
newcommhtml = newcommhtml + '<section class="c-content">';
newcommhtml = newcommhtml + '<img src="images/green-avatar.png" alt="avatar" width="80" height="80" class="ava">';
newcommhtml = newcommhtml + '<p>'+nl2br(data.commentInfo.comment)+'</p> </section></div>';
var thelm = "#c0"+thecid;
commwrap.append(newcommhtml);
$(thelm).hide().fadeIn('slow');
setTimeout(function() { $(thelm).addClass('green'); }, 800);
$("#comm").val("");
thecid++;
if(errorspan.html() != null) {
errorspan.remove();
}
}
},
error: function(jqXHR, textStatus, errorThrown)
{
alert("error"+errorThrown);
console.log("Something really bad happened " + textStatus);
},
});
收到回复..
{"success":true,"commentInfo":{"uname":"shyam","comment":"rreter","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"dfdsfdd","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"xzdfdsfdd","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"sdfsd fsdfs","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"sdsd","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"dd","itemId":0}}
{"success":true,"commentInfo":{"uname":"shyam","comment":"dddf","itemId":0}}
Servlet代码:
while(rs.next()){
Commenter comment = new Commenter();
comment.setUname(rs.getString("uname").trim());
comment.setComment(rs.getString("comments").trim());
commentObj=gson.toJsonTree(comment);
myObj.add("commentInfo", commentObj);
out.println(myObj.toString());
}
请有人告诉我如何解决这个问题......谢谢....
答案 0 :(得分:3)
响应中有几个独立的JSON对象。将它们包裹在一个阵列中你会更好
[{"success":true,"commentInfo":{"uname":"shyam","comment":"rreter","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"dfdsfdd","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"xzdfdsfdd","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"sdfsd fsdfs","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"sdsd","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"dd","itemId":0}},
{"success":true,"commentInfo":{"uname":"shyam","comment":"dddf","itemId":0}}]
并将功能更改为:
success: function( data, textStatus, jqXHR)
{
for(var i = 0,len=data.length;i<len;i += 1){
if(data[i].success)
{
//code
}
}
}
服务器端的只需更改为
out.println("[");
Boolean first = true
while(rs.next()){
Commenter comment = new Commenter();
comment.setUname(rs.getString("uname").trim());
comment.setComment(rs.getString("comments").trim());
commentObj=gson.toJsonTree(comment);
myObj.add("commentInfo", commentObj);
if(!first){
out.print(",");
} else {
first = false;
}
out.println(myObj.toString());
}
out.println("]");
答案 1 :(得分:1)
尝试此代码我认为它可以解决您的问题:
ArrayList<JSONObject> CommArray=new ArrayList<JSONObject>();
while(rs.next()){
JSONObject Obj = new JSONObject();
Obj.put("uname",rs.getString("uname").trim()); //Adds your uname to Object
Obj.put("comment",rs.getString("comments").trim());//Adds your comment to Object
CommArray.add(Obj); //Inserts your Object to ArrayList
System.out.println(rs.getString("comments").trim());
}
JSONArray arrayObj=JSONArray.fromObject(CommArray);//Converts the Array List to JSONArray
commentObj=gson.toJsonTree(arrayObj); //Converts the JSONArray to Jsontree
myObj.add("commentInfo", commentObj); //Adds the Tree to JsonObject as commentInfo Array
out.println(myObj.toString()); //Prints the result
rs.close();
stmt.close();
stmt = null;
conn.close();
conn = null;
}
catch(Exception e){}
我希望这能解决你的问题。
答案 2 :(得分:0)
尝试暂时更改dataType
并提出相同的错误请求,输出回复让我们看看有什么不对。