jquery AJAX 调用返回解析器错误

qij5mzcb  于 2022-11-03  发布在  jQuery
关注(0)|答案(4)|浏览(180)

我有一个控制器,其操作如下

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方法中时,它工作正常。有人能解释一下我的“为什么”吗?
nx7onnlm

nx7onnlm1#

实际上,在jquery 1.5.1和1.5.0中似乎存在一个bug(在以前的版本中不存在)。
事实上,当你使用dataType: 'json'时,它会试图将json解析为一个脚本,你应该使用dataType: 'text/json'来代替。请参阅this link

clj7thdc

clj7thdc2#

根据您响应,在控制器中,没有json编码数据,jsonformat看起来像,{'responseText':'your text here '}

u4vypkhs

u4vypkhs3#

您只返回了一个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
    }
},
fykwrbwg

fykwrbwg4#

服务器返回的数据可能不是json类型,可以用下面两种方法来克服。

  • 选项1:*

使用dataType: 'text'作为 AJAX 请求的一部分。

  • 选项2:*

从 AJAX 请求中删除dataType,因为它会尝试根据响应的类型推断它。

相关问题