這是我第一次使用Ajax Json文章。json使用Ajax和MVC3解析錯誤
我現在下面的腳本代碼:
<script type="text/javascript">
$(document).ready(function() {
// If the button is clicked, redirect to a controller action, send the data, and show
// a view with the changes.
$('#submitDiffs').click(function() {
var requirementNumberData = "@Model.FirstOrDefault().Requirement.RequirementNumber";
var data = [];
$('table tr').children('td').children('#selected :checked').each(function (i, element) {
var el = $(element);
data[i] = el.parent().siblings(':eq(1)').html();
});
diffParameters = GetDifferenceParameters(data);
var jsonData = JSON.stringify(diffParameters, null, 2);
$.ajax({
url: '/Requirements/Differences',
type: 'POST',
data: jsonData,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
// callback handler that will be called on error
success: function (response) {
alert("Ajax call made successfully!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status + '\n\r' + xhr.responseText);
alert(thrownError);
}
});
});
function GetDifferenceParameters(data) {
var requirementNumber = "@Model.FirstOrDefault().Requirement.RequirementNumber";
var oldRequirement = data[1];
var newRequirement = data[0];
return {
RequirementNumber: requirementNumber,
OldRequirement: oldRequirement,
NewRequirement: newRequirement
};
}
});
這個代碼發佈到MVC3控制器,下面的代碼:
[HttpPost]
public ActionResult Differences(RequirementDifferenceViewModel model)
{
HtmlDiff diff = new HtmlDiff(model.OldRequirement, model.NewRequirement);
model.ContentDifference = diff.Build();
return View(model);
}
這裏是視圖模型:
public class RequirementDifferenceViewModel
{
public string RequirementNumber { get; set; }
public string OldRequirement { get; set; }
public string NewRequirement { get; set; }
public string ContentDifference { get; set; }
}
如果我省略了jSON.stringify,控制器操作沒有得到執行,並且出現500錯誤。如果我stringify,我得到一個200的狀態,但是一個jSON解析錯誤返回給AJAX。在這兩種情況下,確切的jSON字符串都會發送到AJAX調用。
這裏是JSON字符串,我複製螢火蟲出來:
{
"RequirementNumber": "PFSNET-UC12-008",
"OldRequirement": "\n <p class=\"Bullet1\"><span style=\"font-size:10.0pt;font-family:Wingdings;\nfont-weight:normal\">r<span style=\"font:7.0pt "Times New Roman"\"> </span></span><span lang=\"X-NONE\">[PFSNET-UC12-008] – Undo/redo will be supported for Expert\nAssistant. The details can be found in the use case for Undo/Redo.</span> </p> \n\n <p class=\"Bullet2\"><span style=\"font-family:Wingdings;font-weight:\nnormal\" lang=\"X-NONE\">§<span style=\"font:7.0pt "Times New Roman"\"> </span></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:06\">A</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">n ‘Undo\nLast Action’ button will </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:06\">also </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">be available</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:05\"> for\nselect products</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">. See\nUC12-</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-29T14:10\">229</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\"> for\nadditional information.</ins></span></p> \n\n <p class=\"MsoNormal\"> </p> \n\n\n ",
"NewRequirement": "\n <p class=\"Bullet1\"><span style=\"font-size:10.0pt;font-family:Wingdings;\nfont-weight:normal\">r<span style=\"font:7.0pt "Times New Roman"\"> </span></span><span lang=\"X-NONE\">[PFSNET-UC12-008] – Undo/redo will be supported for Expert\nAssistant. The details can be found in the use case for Undo/Redo.</span> </p> \n\n <p class=\"Bullet2\"><span style=\"font-family:Wingdings;font-weight:\nnormal\" lang=\"X-NONE\">§<span style=\"font:7.0pt "Times New Roman"\"> </span></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:06\">A</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">n ‘Undo\nLast Action’ button will </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:06\">also </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">be available</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T11:05\"> </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-06-20T12:34\">on </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-06-20T12:42\">the\nAdvanced Expert Assistant screen. </ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\">See\nUC12-</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-29T14:10\">229</ins></span><span class=\"msoIns\"><ins cite=\"mailto:Michelle%20Reini%20Hotchkiss\" datetime=\"2012-05-18T08:36\"> for\nadditional information.</ins></span></p> \n\n <p class=\"MsoNormal\"> </p> \n\n\n "
}
我把這個字符串轉換成JSON驗證網站,它通過:[http://jsonformatter.curiousconcept.com/]
確切的分析錯誤是:語法錯誤:JSON.parse:意外的字符
任何幫助,將不勝感激!
編輯2:
事實證明,解析錯誤是不能夠正確地解析響應的AJAX成功處理程序的結果。我仍然試圖弄清楚這一部分。
只要Success事件執行,代碼執行就跳轉到Error事件。
我安裝了Firefox,它對調試腳本有很大的幫助。我仍然沒有確定解析錯誤,但你的回答是非常有幫助的。 –