ff上报错是:SyntaxError: JSON.parse: unexpected keyword at line 1 column 1 of the JSON data
前端代码
ChatMassage cm = ChatMassage.instance();
String mas = cm.getMassage(num);
int massageNumber = ChatMassage.mass_num;
System.out.println("mnumber:"+massageNumber);
session.setAttribute("massageNumber", massageNumber);
JSONObject json = new JSONObject();
json.put("massage", mas);
json.put("massageNumber", massageNumber);
System.out.println(json);
return json;
前端问题
function loadMassage(){
$.ajax({
data: "num=" + massageNumber,
url: "loadData.do",
Success: $(function(msg){
var res =$.parseJSON(msg);
alert(parseInt(res.massageNumber));
massageNumber=parseInt(res.massageNumber);
massages+=res.massgae;
document.body.innerHTML=massages;
})
});
json生成部分
} else {
cm.addUser(name);
HttpSession session = request.getSession();
session.setAttribute("username", name);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String data = dateFormat.format(new Date());
cm.setMassage("<br><font color=\'red\'> welcom "+name+" join in chatting" + " at "+data+"</font><br>");
}
request header:
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/spring/chat
X-Requested-With: XMLHttpRequest
Cookie: JSESSIONID=26FBFB1DFC7729A3E1A423AECA8B2995
DNT: 1
Connection: keep-alive
Response Header:
Server: Apache-Coyote/1.1
Content-Type: : application/json
Content-Length: 108
Date: Mon, 25 Dec 2017 16:33:01 GMT
在返回时已设置编码
Object result = action.execute(request, response);
if(result instanceof String)
{
request.getRequestDispatcher(result.toString()).forward(request, response);
} else if (result instanceof JSONObject) {
response.setHeader("Content-Type:", "application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print((JSONObject)result);
}
因为是 Linux 系统,所以一般情况下不会出现编码问题。并且我也将中文全部替换为英文。
之前在没开 debug 时,解析全部为 undefinded
解析全部为 undefinded
function loadMassage(){
var dataJson = JSON.stringify(json);
$.ajax({
data: dataJson,
url: "loadData.do",
Content-Type:"application/json",
dataType:'json',
type:"post",
Success: $(function(msg){
var res =$.parseJSON(msg);
alert(parseInt(res.massageNumber));
massageNumber=parseInt(res.massageNumber);
massages+=res.massgae;
document.body.innerHTML=massages;
})
});
试试类似这样的代码
```function loadMassage(){
$.ajax({
data: {num: massageNumber},//1
url: "loadData.do",
dataType: "json",
type:"get",//or "post"
error:function(resp){console.log(resp)},
success: function(msg){//3
console.log(msg);//2
//var res =$.parseJSON(msg);
//alert(parseInt(res.massageNumber));
//massageNumber=parseInt(res.massageNumber);
//massages+=res.massgae;
//document.body.innerHTML=massages;
}//4
});
}
如果你ajax请求返回的是json格式, 不需要parseJSON, 直接用就好, 如
msg.messageNumber
msg.messages
......
https://www.cnblogs.com/zhaopengcheng/p/6890282.html
ajax 请求 对json传的处理 Jquery 使用Ajax获取后台返回的Json数据后,页面处理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
[csharp] view plain copy print?在CODE上查看代码片派生到我的代码片
<%@ WebHandler Language="C#" Class="jsondata" %>
using System;
using System.Web;
using System.Web.Script.Serialization;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Data;
public class jsondata : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Cache.SetNoStore();
string data = "[{\"key\":\"1\",\"info\":{\"name\":\"222\",\"age\":\"333\",\"sex\":\"444\"}},{\"key\":\"2\",\"info\":{\"name\":\"999\",\"age\":\"000\",\"sex\":\"111\"}}]";
context.Response.Write(new JavaScriptSerializer().Serialize(data));
}
public bool IsReusable
{
get
{
return false;
}
}
}
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2013.aspx.cs" Inherits="Test2013" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<input type="button" value="保存数据" onclick="SavePara()" />
</div>
</form>
[csharp] view plain copy print?在CODE上查看代码片派生到我的代码片
<%@ WebHandler Language="C#" Class="GetPara" %>
using System;
using System.Web;
using System.Data;
using System.Collections.Generic;
using System.Web.Script.Serialization;
public class GetPara : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string SortId = context.Request["sortid"];
string Type = context.Request["type"];
if (Type=="get")
{
if (!string.IsNullOrEmpty(SortId))
{
DataTable dt = MSCL.SqlHelper.GetDataTable("select * from PR_PRODUCTPARAS where sortid='" + SortId + "' ");
List list = new List();
for (int i = 0; i < dt.Rows.Count; i++)
{
Paras a = new Paras();
a.id = dt.Rows[i]["PARAID"].ToString();
a.name = dt.Rows[i]["PARANAME"].ToString();
list.Add(a);
}
context.Response.Write(new JavaScriptSerializer().Serialize(list));
}
}
else if (Type == "save")
{
//反序列化json
System.IO.Stream stream = context.Request.InputStream;
System.IO.StreamReader sr = new System.IO.StreamReader(stream, System.Text.Encoding.GetEncoding("UTF-8"));
string sJson = sr.ReadToEnd();
if (sJson.Contains("&"))
{
string[] sArr = sJson.Split('&');
for (int i = 0; i < sArr.Length; i++)
{
string[] sArr1 = sArr[i].Split('=');
object id = sArr1[0];
object value = sArr1[1];
}
}
}
else
{ }
}
public bool IsReusable {
get {
return false;
}
}
public struct Paras
{
public string id;
public string name;
}
}
dataType: "json",
和dataType: "json"没关系,写不写都无所谓,我以前也遇到这个问题了,你只需要把这个JSONObject json = new JSONObject();替换掉,用一个json的生成包,调用里面的方法来进行json转换就好了,具体的包你可以百度一下,我现在没有电脑,不能发
上述所说的几个包,使用里面的json转义应该就好了
commons-beanutils-1.8.3.jar
commons-collections-3.2.jar
commons-lang.jar
commons-logging-1.1.jar
ezmorph-1.0.jar
json-lib-2.2.2-jdk15.jar
你可以去 http://www.manyjar.com/ 下载,里面的架包应该都有,而且免费,很实用的一个架包网站
提供给你两个解决方案:
一:后台直接传输Map。在前台接收到以后就是一个Object对象。可以通过data.key,获取value;
二:使用console.log(data);查看前端接收到的data是什么格式。根据data的格式,获取你所需要的内容。
看结果是返回值不少json格式的值导致的,可能原因:后台处理返回值错误或者前台解析函数有问题,具体问题具体分析,debugger一下,看data值有没有值,在console使用函数解析下,问题应该很快就会出现。
另,总感觉你ajax写的有问题,但是不知道具体代码不能确定
已经是json 为什么还要解析成json ?
你不是设置这个了么 ?
response.setHeader("Content-Type:", "application/json");
后台方法不能直接返回JSON对象,需要做以下处理。
//调用
JSONObject json = new JSONObject();
json.put("status", "SUCCESS");
ajax(json.toString());
/**
* JSON格式输出
*/
public String ajax(String jsonStr) {
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/plain;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.getWriter().write(jsonStr);
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
```function loadMassage(){
$.ajax({
data: {num: massageNumber},//1
url: "loadData.do",
dataType: "json",
type:"get",//or "post"
error:function(resp){console.log(resp)},
success: function(msg){//3
console.log(msg);//2
//var res =$.parseJSON(msg);
//alert(parseInt(res.massageNumber));
//massageNumber=parseInt(res.massageNumber);
//massages+=res.massgae;
//document.body.innerHTML=massages;
}//4
});
}
我只知道json依赖包 responsebody ajax异步请求
直接传输过来的数据就是json格式
用$('')使用就好了
JSON.stringify(a); 试试这个函数吧json对象转为字符串
1.首先ajax中没有限制返回类型必须是
type:‘json’
2.返回数据类型不是json格式,需要解析为json格式使用:
$.parseJSON(msg);
否则直接使用即可