在我的控制器中我有
public JsonResult GetInfo(string id)
在我的js中
$.ajax({
contentType: 'application/json, charset=utf-8',
type: "POST",
url: "/Incidents/GetInfo",
data: { id: "777" },
cache: false,
dataType: "json",
success: function (response) {
//etc....
jquery ajax错误委托被执行。如果我使用
data: { "777" },
没有错误,但是没有传递值。这应该很容易,但我正在撞墙。也许我不允许将字符串传递给控制器的动作?
我在这里做错了什么?
答案 0 :(得分:12)
您正在指示application/json
请求,并且您正在发送application/x-www-form-urlencoded
请求。因此,您必须在两种编码参数之一中进行选择,而不是混合它们。
application/x-www-form-urlencoded
:
$.ajax({
type: "POST",
url: "/Incidents/GetInfo",
data: { id: "777" },
cache: false,
dataType: "json",
...
});
application/json
:
$.ajax({
type: "POST",
url: "/Incidents/GetInfo",
contentType: 'application/json, charset=utf-8',
data: JSON.stringify({ id: "777" }),
cache: false,
dataType: "json",
...
});
JSON.stringify
方法本身内置于现代浏览器中,用于将javascript文字转换为JSON字符串,这是我们表示将发送请求的字符串。如果您必须支持旧版浏览器,则可以在页面中包含json2.js脚本,其中包含此方法。
作为旁注,不需要dataType: "json"
设置,因为服务器会将正确的Content-Type
标头设置为application/json
,并且jQuery足够聪明,可以使用它。
作为第二方注释,你真的不想在你的javascript文件中硬编码这样的网址:url: "/Incidents/GetInfo"
。你想要的是在生成网址时使用网址助手:url: "@Url.Action("GetInfo", "Incidents")"
。
答案 1 :(得分:0)
你在动作中缺少HttpPost属性吗?如果没有,请使用类似firebug或chrome dev工具的内容来查看http请求/响应并获取更多详细信息......
[HttpPost]
public JsonResult GetInfo(string id)