JQuery获取JSON.parse:意外字符
您好,我收到以下错误: 二百 语法错误:JSON.parse:意外字符 我在firebug中检查了我的JSON,它显示以下内容:JQuery获取JSON.parse:意外字符,jquery,json,asp.net-mvc-3,Jquery,Json,Asp.net Mvc 3,您好,我收到以下错误: 二百 语法错误:JSON.parse:意外字符 我在firebug中检查了我的JSON,它显示以下内容: jquery-1.8.3.js (line 2) POST http://localhost:1579/Comets/Progress/4c691777-2a9f-42ca-8421-d076ab4d0450/1 200 OK JSON Sort by key MsgId "4c691777-2a9f-42ca-8421
jquery-1.8.3.js (line 2)
POST http://localhost:1579/Comets/Progress/4c691777-2a9f-42ca-8421-d076ab4d0450/1
200 OK
JSON
Sort by key
MsgId "4c691777-2a9f-42ca-8421-d076ab4d0450"
Status 2
CurrentServer "10.10.143.4"
这对我来说似乎没什么问题,所以我不确定哪里出了错,为什么会出错
我的代码如下:
Jquery:
$(document).ready(function Progress() {
var msgId = $('textarea.msgId').val();
var status = $('textarea.status').val();
$.ajax({
type: 'POST',
url: "/Comets/Progress/" + msgId + "/" + status,
success: function (data) {
//update status
alert("does this work");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
});
控制器:
[JsonpFakeFilter]
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Progress(string msgId, int status, String callback)
{
//todo need to put recursive function on here (status)
//check the ip - has it changed
string strHostName = System.Net.Dns.GetHostName();
var ipHostInfo = Dns.Resolve(Dns.GetHostName());
var ipAddress = ipHostInfo.AddressList[0];
var currentServer = ipAddress.ToString();
var cometJson = new CometJson
{
MsgId = msgId,
Status = status,
CurrentServer = currentServer
};
//check what the status is if it is less than 4 we want to add one
if (status <= 4)
{
status = status + 1;
cometJson = new CometJson
{
MsgId = msgId,
Status = status,
CurrentServer = currentServer
};
return Json(cometJson);
}
return Json(cometJson);
}
[JsonpFakeFilter]
[接受动词(HttpVerbs.Post)]
公共JsonResult进度(字符串msgId、int状态、字符串回调)
{
//todo需要在此处设置递归函数(状态)
//检查ip-是否已更改
字符串strHostName=System.Net.Dns.GetHostName();
var ipHostInfo=Dns.Resolve(Dns.GetHostName());
var ipAddress=ipHostInfo.AddressList[0];
var currentServer=ipAddress.ToString();
var cometJson=new cometJson
{
MsgId=MsgId,
状态=状态,
CurrentServer=CurrentServer
};
//如果小于4,请检查状态。我们要添加一个
如果(状态您的服务器返回无效的JSON:
callback_dc99fd712fff48d6a56e0d9db5465ac3({"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"})
{"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Progress(string msgId, int status)
{
...
}
这不是JSON。这是跨域AJAX调用,并且用于跨域AJAX调用。在这种情况下,您不是在进行跨域AJAX调用,因此应该删除回调\u dc99fd712ff48d6a56e0d9db5465ac3
包装并返回有效的JSON:
callback_dc99fd712fff48d6a56e0d9db5465ac3({"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"})
{"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Progress(string msgId, int status)
{
...
}
我猜您修饰控制器操作的[JsonpFakeFilter]
属性负责用这个回调包装JSON结果
因此,请摆脱它,并确保您的服务器返回有效的JSON:
callback_dc99fd712fff48d6a56e0d9db5465ac3({"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"})
{"MsgId":"b91949f4-a30e-4f3f-b6e8-f83fc40ada89","Status":2,"CurrentServer":"10.10.143.4"}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Progress(string msgId, int status)
{
...
}
您能否显示服务器返回的JSON字符串,如FireBug中所示?请尝试记录JSON结果,可能它不是正确的JSON字符串。@DarinDimitrov Hi在FireBug中我看到MsgId“fc91db57-b35e-4254-82f0-3defb9f4c079”状态2 CurrentServer“10.10.143.4”这不是你的意思吗?你试过用数据替换数据吗?在成功函数中写“console.log(data)”,然后发布结果。谢谢,这将使我走上正确的道路-我确实需要一个jsonp,因为一旦上线,它将跨域运行,但至少现在我将朝着正确的方向前进