下面的代码应该是在单击链接时调用控制器的。控制器被成功调用,但javascript端唯一被调用的方法是always
,它显示一个弹出窗口,声明"未定义"。
将方法添加到链接
$('.retrieveTeam').click(function () {
_getData($(this).data("teamkey"));
});
jQuery AJAX调用
function _getData(postdata) {
var request = $.ajax({
url: 'RetrieveTeam',
type: 'POST',
data: JSON.stringify({ TeamKey: "331.l.542488.t.1" }),
datatype: JSON,
contentType: "application/json"
});
request.success = function (result) {
alert(result);
}
request.error = function (result, xh) {
alert("error");
}
request.fail = function () {
alert("failure");
}
request.always = function (result) {
alert(result);
}
}
控制器
[HttpPost]
public JsonResult RetrieveTeam(string TeamKey)
{
List<Team> objTeams = (List<Team>)Session["Teams"];
Team objTeam = objTeams.Where(x => x.TeamKey == TeamKey).FirstOrDefault();
objTeam.AddPlayer(new FootballPlayer(new Position("QB", "QB", "QB"), "Brett Favre", "QB"));
return Json(objTeam);
}
您使用的是jQuery 2.1.1。阅读$.ajax
的手册页面,我们可以看到:
jqXHR.success()
、jqXHR.error()
和jqXHR.complete()
回调是自jQuery 1.8起已弃用。为它们的最终版本准备代码删除时,请改用jqXHR.done()
、jqXHR.fail()
和jqXHR.always()
。
在您的代码中,
request.success = ...
应该用代替
request.done(...)
CCD_ 9和CCD_。此外,修复您的dataType
所有这些都将我们带到:
function _getData(postdata) {
$.ajax({
url: 'RetrieveTeam',
type: 'POST',
data: JSON.stringify({ TeamKey: "331.l.542488.t.1" }),
datatype: "json",
contentType: "application/json"
}).done(function (foo) {
}).fail(function (foo) {
}).always(function (foo) {
});
}