Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC控制器返回内容vs返回Json Ajax_C#_Jquery_Ajax_Asp.net Mvc_Json - Fatal编程技术网

C# MVC控制器返回内容vs返回Json 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将尝试猜测内

在MVC中,为什么在Ajax回调中返回
内容
有时会失败,而返回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);