我有一个jquery ajax脚本,如下面的
$.ajax({
type: "POST",
url: "Main/receive", // the method we are calling
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ 'p':$("#txtname").val() }),
dataType: "json",
success: function (result) {
alert('Yay! It worked!');
// Or if you are returning something
},
error: function (result) {
alert('Oh no zzzz:('+result.responseText);
}
});
我正在调用Controller动作方法。数据正在发送到控制器的操作方法,我也从控制器接收数据。但是我收到的数据是在jquery ajax的错误函数中。
我希望它在成功函数内部。
为什么我的成功功能没有被调用。
以下是我的控制器的操作方法
[HttpPost]
public string receive(string p)
{
ViewBag.name = p;
return p;
}
答案 0 :(得分:1)
错误的原因是您已指定返回的数据类型为json(在行dataType: "json",
中)但您返回文本。你有2个选择。
return Json(p);
dataType: "text",
或只是省略它但是,您可以改进您的脚本,如下所示
$.ajax({
type: "POST",
url: '@Url.Action("receive", "Main")', // don't hardcode url's
data: { p: $("#txtname").val() }, // no need to stringify (delete the contentType: option)
dataType: "json",
success: function (result) {
alert('Yay! It worked!');
},
error: function (result) {
alert('Oh no zzzz:('+result.responseText);
}
});
甚至更简单
$.post('@Url.Action("receive", "Main")', { p: $("#txtname").val() }, function(result) {
alert('Yay! It worked!');
}).fail(function(result) {
alert('Oh no zzzz:('+result.responseText);
});
注意:您应始终使用@Url.Action()
生成正确的网址,在这种情况下不必对数据进行字符串化(但您需要删除contentType:
行,以便使用默认值application/x-www-form-urlencoded; charset=UTF-8
)
此外,这不是严格意义上的POST(您在服务器上没有更改数据 - 但我认为这仅用于测试)。行ViewBag.name = p;
中没有任何意义 - 它在您的上下文中没有任何作用,一旦您从方法返回,ViewBag
无论如何都会丢失。
答案 1 :(得分:0)
尝试更改您的控制器代码,如下所示
[HttpPost]
public ActionResult List(string p)
{
ViewBag.name = p;
return Json(ViewBag);
}
答案 2 :(得分:0)
您的控制器方法应如下所示:
[HttpPost]
public ActionResult receive(string p)
{
return Json(p);
}