Ajax调用返回parsererror

时间:2013-11-17 17:10:19

标签: asp.net-mvc jquery

我有一个像这样的行动的控制器

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);置于操作方法中时,它可以正常工作。有人可以解释一下我的“为什么?”

4 个答案:

答案 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 ,因为它会尝试根据响应的类型进行推断。