我在ASP.NET MVC 4上发布json数据时遇到了问题。
当我调用ajax函数时,我收到以下错误:302 Found。
jQuery代码:
var dataJson = [];
dataJson.push({
name: "Renato Leite"
});
$.ajax({
url: "/Controller/MyAction",
type: 'POST',
dataType: 'json',
data: JSON.stringify(dataJson),
contentType: 'application/json; charset=utf-8',
async : false,
success: function (data) {
var message = data.Message;
}
});
C#代码:
public ActionResult MyAction(string name)
{
return Json(new { Message = "Sucess" }, JsonRequestBehavior.AllowGet);
}
请求的返回:
状态代码:302找到
如何解决这个问题?
答案 0 :(得分:3)
您的操作只接受字符串参数。目前您正在传递一个字符串数组。因此你得到错误
只需使用
var dataJson = {
name: "Renato Leite"
};
答案 1 :(得分:1)
您不需要对单个字符串进行字符串化。尝试用此
替换数据行data: { name: "Renato Leite" },
答案 2 :(得分:1)
奇怪,我把你的确切代码放到我的项目中,我得到了正确的数据。
也许尝试将结果更改为JsonResult而不是ActionResult?
答案 3 :(得分:1)
您应该将以下属性添加到您的操作方法,因为您的ajax调用使用“POST”方法
[HttpPost]
答案 4 :(得分:1)
检查此解决方案 -
控制器 -
public ActionResult SubmitTag(string test)
{
return Json(new { Message = "Sucess" }, JsonRequestBehavior.AllowGet);
}
查看 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$("#ClickMe").click(function () {
var tag = {
"test": "SampleTag"
};
$.ajax({
url: "@Url.Action("SubmitTag")",
type: "POST",
data: JSON.stringify(tag),
contentType: "application/json; charset=utf-8",
success: function (data) {
alert(data.Message);
},
error: function (response) {
alert(response.responseText + "e");
}
});
});
});
</script>
<input type="button" id="ClickMe" value="ClickMe" />
输出 -
答案 5 :(得分:1)
由于@nboisvert指出您正在发帖,因此您的操作需要[HttpPost]
属性。
正如@Satpal所指出的那样,你的JSON有效负载实际上是一个对象数组,它被发布到一个只接受字符串参数的方法。
var dataJson = [];
dataJson.push({
name: "Renato Leite"
});
JSON.stringify(dataJson); // "[{"name":"Renato"}]" notice the square brackets
你可以轻松发布
data: JSON.stringify({name: "Renato Leite"});
答案 6 :(得分:0)
我发现了这个问题,我有两个同名的动作,所以发生了错误。无论如何欣赏帮助! :)
答案 7 :(得分:0)
尝试将Controller Action参数更改为Ienumerable字符串,例如string [] name或IEnumerable name。方括号用于数组。