我有两个基本的测试应用程序,我在那里执行ajax请求。在调用ajax请求之后,对于第一个请求,我需要在检索值之前解析ajax data.responseText 。对于第二个,我可以直接访问值。
第一个应用的代码:
@using (Ajax.BeginForm("JsonAdd", "People", new AjaxOptions { OnComplete = "JsonAdd_OnComplete" }))
{
...
}
function JsonAdd_OnComplete(data) {
var json = $.parseJSON(data.responseText);
if (json.Success) {
$("#PersonList").html(json.PartialViewHtml);
}
$("#addPersonModal").slideToggle();
$("#message").html(json.Message);
}
如您所见,我需要在获取值之前先解析data.responseText。
这是第二个应用程序:
@using (Ajax.BeginForm("_NewPersonToKeepInformed", "General", new { id = "NewPersonToKeepInformed" }, new AjaxOptions { Confirm = "Are you sure ?", HttpMethod = "POST", OnSuccess = "AddedSuccess" }))
function AddedSuccess(response) {
alert(response.message);
}
对于这个,我直接访问值。
更新
这是我的控制器操作方法:
public JsonResult JsonAdd(AddPersonViewModel AddPersonModel)
{
...
return Json(new
{
Success = true,
Message = "The person has been added!"
});
}
这是第二个:
public JsonResult _NewPersonToKeepInformed(NewPersonToKeepInformedViewModel viewModel)
{
...
// return newly added person in a Json object
return Json(new { message = "Ajout effectué", firstName = viewModel.FirstName, lastName = viewModel.LastName, phone = viewModel.Phone, mail = viewModel.Mail });
}
为什么?
感谢。
答案 0 :(得分:6)
在第一种情况下,您使用OnComplete
,在第二种情况下,您使用OnSuccess
。这就是区别。它们对应于jQuery的complete
和success
回调。 jQuery不会根据complete
回调中的Content-Type标头解析服务器的响应。这就是你需要手动解析它的原因。在success
回调中,这是自动完成的。因此,如果您希望此操作适用于您的第一个操作,请将new AjaxOptions { OnComplete = "JsonAdd_OnComplete" }
替换为new AjaxOptions { OnSuccess = "JsonAdd_OnComplete" }