我有一个控制器,其操作如下
public ActionResult UpdateCompanyInfo(Parameter parameter)
{
bool result = false;
if(ModelState.IsValid)
{
bla bla bla
}
return Json(result, JsonRequestBehavior.AllowGet);
}
我也有一个javascript函数:
function blabla(){
$.ajax({
type: 'POST',
url: "What Ever",
async: false,
data: JSON.stringify(jsonObject),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (succeed) {
if (succeed) {
// Some Code
}
},
error: function () {
//Some Other Code
}
});
}
javascript函数正确调用,并且它使用参数命中Action方法(还没有问题!)。
但当Action方法使用Json
函数返回bool
对象时,它会使用以下参数命中javascript错误函数响应:
readyState 4
responseText "true"
status 200
statusText "parsererror"
jQuery15101815967692459196_1384707824272 was not called
我也试过return Json(new { result }, JsonRequestBehavior.AllowGet);
和return Json(new {succeed = result }, JsonRequestBehavior.AllowGet);
和return Json(new {succeed = result.ToString() }, JsonRequestBehavior.AllowGet);
但也不起作用。
另外,我在另一个控制器中有一个完全相同的函数,它调用了另一个相同的javascript函数,但它工作正常。我不知道它有什么问题。我错过了什么吗?
- ----------编辑-----------
我不知道为什么!但是当我从 AJAX 调用中移除dataType: 'json',
,并将return Json(result, JsonRequestBehavior.AllowGet);
放在action方法中时,它工作正常。有人能解释一下我的“为什么”吗?
4条答案
按热度按时间nx7onnlm1#
实际上,在jquery 1.5.1和1.5.0中似乎存在一个bug(在以前的版本中不存在)。
事实上,当你使用
dataType: 'json'
时,它会试图将json解析为一个脚本,你应该使用dataType: 'text/json'
来代替。请参阅this link。clj7thdc2#
根据您响应,在控制器中,没有json编码数据,jsonformat看起来像,
{'responseText':'your text here '}
u4vypkhs3#
您只返回了一个JS中的JSON解析器不会接受的值。请尝试以下操作:
JSON返回的匿名对象如下所示:
然后,您可以在
success
处理程序中处理它,如下所示:fykwrbwg4#
服务器返回的数据可能不是json类型,可以用下面两种方法来克服。
使用
dataType: 'text'
作为 AJAX 请求的一部分。从 AJAX 请求中删除dataType,因为它会尝试根据响应的类型推断它。