在我的代码中,我需要接收一个字符串,将其转换为C#枚举,然后将该枚举传递给我的模型。该代码在for循环内(未显示)。
var thisDwm = document.getElementById("dwm_" + i).value;
var urlDwm = "/KnowledgeTransfer/GetDailyWeeklyMonthlyEnum";
var response
$.ajax({
type: 'GET',
url: urlDwm,
data: { 'caseFromJS': thisDwm },
contentType: 'application/json',
success: function (thisResponse) {
response = thisResponse;
}
})
model.MainResponsibilities[i].DailyWeeklyMonthly = response;
当前,ajax命中我的C#控制器并返回正确的枚举。但是,当我查看JavaScript断点时,“响应”仍未定义且未设置。如何设置对可以传递给模型的C#枚举对象的响应?是否需要进行某些解析?看来我什么都没收到。
无济于事的是,类型,数据,contentType,成功和thisResponse在Chrome中都显示为“未定义参考错误”。但是,即使这些其他方法也显示了此错误,Ajax仍然至少在其他地方仍然有效。
谢谢您的帮助。
编辑:以下是我的控制器方法:
public ObjectModel.Enums.DailyWeeklyMonthly GetDailyWeeklyMonthlyEnum(string caseFromJS)
{
switch (caseFromJS){
case "Daily":
return ObjectModel.Enums.DailyWeeklyMonthly.Daily;
case "Weekly":
return ObjectModel.Enums.DailyWeeklyMonthly.Weekly;
case "Monthly":
return ObjectModel.Enums.DailyWeeklyMonthly.Monthly;
case "Yearly":
return ObjectModel.Enums.DailyWeeklyMonthly.Yearly;
default:
throw new Exception("problem with dailyWeeklyMonthly in KnowledgeTransferController");
答案 0 :(得分:2)
使用共享的代码,如果尝试在定义变量之前使用response
变量,则会得到 未定义响应 错误。在您共享的代码段中,您仅在ajax调用的success
回调方法中对其进行初始化。
请记住,ajax是异步。当JavaScript框架执行此行model.MainResponsibilities[i].DailyWeeklyMonthly = response;
(在成功回调范围之外)时,ajax调用可能仍在执行/等待服务器的响应,这意味着未将任何内容设置为response
,这表明表示变量response
未初始化!
仅在success
或done
回调中访问有关ajax调用的响应。
$.ajax({
type: 'GET',
url: urlDwm,
data: { 'caseFromJS': thisDwm },
contentType: 'application/json',
success: function (thisResponse) {
// safe to use thisResponse in this callback method scope
console.log(thisResponse);
// Assuming model.MainResponsibilities[i] exist
model.MainResponsibilities[i].DailyWeeklyMonthly = thisResponse;
}
})