C# MVC控制器返回内容vs返回Json Ajax
在MVC中,为什么在Ajax回调中返回C# MVC控制器返回内容vs返回Json Ajax,c#,jquery,ajax,asp.net-mvc,json,C#,Jquery,Ajax,Asp.net Mvc,Json,在MVC中,为什么在Ajax回调中返回内容有时会失败,而返回Json即使对于简单的字符串对象也是有效的 即使失败,如果您要在“始终”回调中访问数据,数据仍然可用 更新: 当我在ajax调用中将contentType设置为text/xml时,响应将不再输入错误消息 阿贾克斯: 控制器操作失败(有时) 即使失败,数据仍然可用 始终有效的控制器操作 使用内容(Foo)发送没有mime类型头的响应。发生这种情况是因为在使用此重载时没有设置ContentType。未设置内容类型时,jQuery将尝试猜测内
内容
有时会失败,而返回Json即使对于简单的字符串对象也是有效的
即使失败,如果您要在“始终”回调中访问数据,数据仍然可用
更新:
当我在ajax调用中将contentType设置为text/xml
时,响应将不再输入错误消息
阿贾克斯:
控制器操作失败(有时)
即使失败,数据仍然可用
始终有效的控制器操作
使用内容(Foo)代码>发送没有mime类型头的响应。发生这种情况是因为在使用此重载时没有设置ContentType
。未设置内容类型时,jQuery将尝试猜测内容类型。发生这种情况时,它是否能够成功猜测取决于实际内容和底层浏览器。见:
数据类型(默认值:智能猜测(xml、json、脚本或html))
另一方面,Json(…)
将内容类型设置为“application/Json”
,以便jQuery确切地知道如何对待内容
如果使用并指定ContentType,则可以从内容中获得一致的结果:
return Content(Foo, "application/json"); // or "application/xml" if you're sending XML
但是如果您总是处理JSON,那么更喜欢使用JsonResult
return Json(Foo, JsonRequestBehavior.AllowGet);
定义“fails”。从服务器返回的实际响应是什么?它与“successful”响应有何不同?即使数据返回正确且没有任何错误,它也会在Ajax方法中输入错误函数。成功响应在Ajax成功方法中触发,我在该方法中警告数据。请尝试将contentType:“application/json”添加到参数列表中。@SummedMessage:为了使处理程序中有任何差异,响应的某些内容必须不同。它的内容、标题等等。@David如果在Ajax调用中将内容类型更改为text/xml
,返回内容不会失败。一位同事的理论是,内容返回一个转换为纯文本的字符串对象,而返回json显式返回一个json对象。+1。但是,如果OP总是期望JSON,那么将ActionResult
更改为JsonResult
?@MelanciaUK:如果总是期望JSON,那么是的。但我明白你的意思。更新我的答案…谢谢澄清。在这种情况下,我一直在期待JSON,但我真正缺少的是mime类型以及ContentResult
和JsonResult
之间的差异。
public ActionResult GetFooString()
{
String Foo = "This is my foo string.";
return Json(Foo, JsonRequestBehavior.AllowGet);
} // end GetFooString
return Content(Foo, "application/json"); // or "application/xml" if you're sending XML
return Json(Foo, JsonRequestBehavior.AllowGet);