我有一个像这样的行动的控制器
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方法使用bool
函数返回Json
对象时,它会使用以下参数命中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);
置于操作方法中时,它可以正常工作。有人可以解释一下我的“为什么?”
答案 0 :(得分:1)
实际上似乎jquery 1.5.1和1.5.0中存在一个错误(以前的版本中不存在)。
实际上,当您使用dataType: 'jason'
时,它会尝试将json解析为脚本,您应该使用dataType: 'text json'
代替。见this link。
答案 1 :(得分:0)
根据您的回复,在控制器中,没有json编码数据,jsonformat看起来像{'responseText':'your text here '}
答案 2 :(得分:0)
您只返回JS中的JSON解析器不接受的单个值。试试这个:
public ActionResult UpdateCompanyInfo(Parameter parameter)
{
bool result = false;
if(ModelState.IsValid)
{
bla bla bla
}
return Json(new { success = result }, JsonRequestBehavior.AllowGet);
}
JSON返回的匿名对象如下所示:
[{ "success": true }]
然后您可以在success
处理程序中处理,如下所示:
success: function (data) {
if (data.success) {
// Some Code
}
else {
// Bad things going down
}
},
答案 3 :(得分:0)
从服务器返回的数据可能不是json类型。因此,您可以使用以下两种方法来克服。
选项1:
将dataType: 'text'
用作ajax请求的一部分。
选项2:
从Ajax请求中删除 dataType ,因为它会尝试根据响应的类型进行推断。