ajax - jQuery Ajax 从 asp.net 核心控制器的 POST 操作返回未定义的结果
问题描述
无法从我的 AJAX 和 MVC 6 控制器中结交朋友。
这就是我为SetFormValues POST-action 定义 AJAX 调用的方式:
索引.cshtml
$.ajax({
type: "Post",
url: "Home/SetFormValues",
data: { Name: name, Phone: phone },
dataType: "json",
success: function (result) {
SuccessFunction(result)
},
error: function () {
alert("ALARM!");
},
async: false
})
我看到控制器工作并执行SetFormValues操作,定义如下:
家庭控制器.cs
[HttpPost]
public JsonResult SetFormValues(string Name, string Phone)
{
string NameErrorStr = string.IsNullOrWhiteSpace(Name) ? "Обязательное поле" : string.Empty;
string PhoneErrorStr = string.IsNullOrWhiteSpace(Phone) ? "Обязательное поле" : string.Empty;
var result = new { NameError = NameErrorStr, PhoneError = PhoneErrorStr };
var jresult = Json(result);
return jresult;
}
最后,他是如何定义SuccessFunction(result)的:
再次索引.cshtml
function SuccessFunction(result) {
alert("Success function shit executed. result=" +
result + "NameError=" +
result.NameError + ". PhoneError=" +
result.PhoneError);
$("#nameerror").append(result.NameError);
$("#phoneerror").append(result.PhoneError);
}
功能有效,警报被提出,但无论我做什么,结果都保持“未定义”:
result = [object Object]
result.val = undefined
也许我必须正确反序列化 JSON 结果或在上面的声明中填写一些属性,我不知道。我正在使用最新的 jquery 库,验证和不引人注目。我也尝试过JSON.parse(result),正如最新的 jQuery 规范中提到的那样,但效果不佳。
请帮我 :)
解决方案
在 asp.net core 中,默认情况下,序列化程序使用camelCase
属性名称进行 json 序列化。所以你的结果会是这样的
{"nameError":"some message","phoneError":"some message here"}
Javascript 区分大小写。所以使用正确的大小写
$("#nameerror").append(result.nameError);
$("#phoneerror").append(result.phoneError);
推荐阅读
- docker - Kubernetes DNSPolicy 配置
- java - Java 给出看似随机的 StackOverflowError
- ios - 一个应用程序 -> 多种语言
- typescript - 如何在我的自定义类型定义文件中导入其他类型定义
- reactjs - 使用 redux-tooltip 时“this.props.dispatch 不是函数”
- c++ - 为什么不能前向声明 typedef?
- php - Laravel 不断将表迁移到错误的数据库中
- javascript - 选择所有复选框(两个单独的复选框组)
- java - RecyclerView 无限滚动到顶部(聊天应用)
- swift - 如何在不使用 Firebase 控制台的情况下发送推送通知