这是ajax请求:
$("form").submit(function () {
var id = $("#EmployeeId").attr("value");
var attendDate = $("#AttendDate").attr("value");
$.post("/Attendance/CheckIn", { id: id, attendDate: attendDate }, function (data) {
alert(data.Data.Value);
});
});
这是action方法:
public JsonResult CheckIn(string id, string attendDate)
{
int employeeId = Convert.ToInt32(id);
DateTime time = Convert.ToDateTime(attendDate);
var attendanceModel =
attendanceRepository.GetMany(
a => a.EmployeeId == employeeId & a.AttendDate.ToShortDateString() == time.ToShortDateString());
var b = attendanceModel.Count() == 0 ? "true" : "false";
JsonResult json = new JsonResult()
{
Data = new { Value = b }
};
return Json(json);
}
好像是写在submit事件中出问题了
我修改了请求:
function onClick() {
var id = $("#EmployeeId").attr("value");
var attendDate = $("#AttendDate").attr("value");
var v;
$.ajax({
url: '/Attendance/CheckIn',
type: 'POST',
data: { id: id, attendDate: attendDate },
dataType: 'json',
timeout: 2000,
success: function (data) {
v = data.Data.Value;
alert(v);
}
});
alert(v);
return false;
我发现v这个变量先是提示未定义,然后是false.意思是Post请求在好获得结果的时候,js会异步往下执行,咋办啊,我想等待回调啊。
{ id: id, attendDate: attendDate }
这好像不是标准的JSON格式啊
未定义是第二个alert弹出来的,ajax里的那个才是返回的值
和c#不一样吗,外面应该也可以获取值啊
@鬼灯水月:
ajax是异步的,在执行到第二个alert时V还没有值呢
变量是我在ajax外面定义的啊
@鬼灯水月:
var v;
alert(v);//out undefined
是弹出undefined吗,就是这样的啊,在执行
alert(v);
return false;
时ajax还在执行,还没有返回data
@菜鸟程序猿:
找到原因了,ajax请求默认是一般的
$.ajax({
url: '/Attendance/CheckIn',
async: false,
type: 'POST',
data: { id: id, attendDate: attendDate },
dataType: 'json',
timeout: 2000,
success: function (data) {
v = data.Data.Value;
alert(v);
}
});
为什么一定要用json。。。用文本啊。。ContentResult
$.ajax({
url: '/Attendance/CheckIn',
async: false,
type: 'POST',
data: { id: id, attendDate: attendDate },
dataType: 'json',
timeout: 2000,
success: function (data) {
v = data.Data.Value;
alert(v);
}
});
编辑器加载中...