Javascript 无法将JSON结果传递回视图
我有下面的HTML来显示一些消息Javascript 无法将JSON结果传递回视图,javascript,asp.net-mvc,json,asp.net-mvc-5,Javascript,Asp.net Mvc,Json,Asp.net Mvc 5,我有下面的HTML来显示一些消息 ... <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <span id="fail_message" class="label label-danger"></span> <span id="success_message" class="label label-success">
...
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<span id="fail_message" class="label label-danger"></span>
<span id="success_message" class="label label-success"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="button" value="Invite User" class="btn btn-primary"/>
</div>
</div>
...
。。。
...
按下按钮时激发的脚本为
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result_success, result_failure) {
$('#fail_message').val(result_failure);
$('#success_message').val(result_success);
}
});
});
});
</script>
$(函数(){
$(“输入[类型=按钮]”)。单击(函数(){
var data_email=$('#email').val();
var data_product=$(“#产品选项:选定”).text();
$.ajax({
url:“工具/发送邀请”,
键入:“POST”,
数据:{email:data\u email,product:data\u product},
成功:功能(结果成功,结果失败){
$('fail_message').val(result_failure);
$('success_message').val(result_success);
}
});
});
});
那么在我的控制器里我有
[AllowAnonymous]
public async Task<ActionResult> SendInvite(
string email, string product)
{
// Check if admin.
ApplicationUser user = null;
if (ModelState.IsValid)
{
user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user.IsAdmin != null && (bool)user.IsAdmin)
{
string key = String.Empty;
string subMsg = String.Empty;
var accessDB = new AccessHashesDbContext();
switch (product) { /* do stuff */ }
// Send email.
try
{
await Helpers.SendEmailAsync(new List<string>() { email }, null, "my msg string" );
result = String.Format("Invitation successfully sent to \"{0}\"", email);
return Json(new {
result_success = result,
result_failure = String.Empty
},
JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
result = String.Format("Invitation to \"{0}\" failed", email);
return Json(new {
result_success = String.Empty,
result_failure = result
},
JsonRequestBehavior.AllowGet);
}
}
}
return Json(new {
result_success = String.Empty,
result_failure ="Invite Failure"
},
JsonRequestBehavior.AllowGet);
}
[AllowAnonymous]
公共异步任务
但是这些对我没有帮助。用以下方法改变你的成功方法
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
服务器返回一个json对象。使用以下命令更改成功方法
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
服务器返回一个json对象。尝试将ajax成功处理程序更改为
function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
处理程序应该接收一个JSON对象,该对象具有您在操作中指定的两个属性。尝试将ajax成功处理程序更改为类似的属性
function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
处理程序应该接收一个JSON对象,该对象具有您在操作中指定的两个属性。您必须使用此属性
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
$(函数(){
$(“输入[类型=按钮]”)。单击(函数(){
var data_email=$('#email').val();
var data_product=$(“#产品选项:选定”).text();
$.ajax({
url:“工具/发送邀请”,
键入:“POST”,
数据:{email:data\u email,product:data\u product},
成功:功能(结果){
$('#fail_message').html(result.result_failure);
$('success_message').html(result.result_success);
}
});
});
});
您必须使用此
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
$(函数(){
$(“输入[类型=按钮]”)。单击(函数(){
var data_email=$('#email').val();
var data_product=$(“#产品选项:选定”).text();
$.ajax({
url:“工具/发送邀请”,
键入:“POST”,
数据:{email:data\u email,product:data\u product},
成功:功能(结果){
$('#fail_message').html(result.result_failure);
$('success_message').html(result.result_success);
}
});
});
});
JavaScript需要如下:
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
您创建了一个新对象:new{}
然后将其与一些字段合并。因此,当它被发送回页面时,将有一个具有两个属性的对象(result
)。显然,返回的对象不是调用result
,而是在函数上下文中为其指定的名称
最后,因为您使用的是returnjson
,所以还应该确保您的操作方法返回类型JsonResult
而不是ActionResult
。在后台,ASP.NET团队扩展了ActionResult
,但他们还设置了一些属性,如内容类型,以确保网页知道如何处理响应。它还使用JavaScript序列化器来正确序列化对象。参考:
公共异步任务SendInvite(
字符串(电子邮件、字符串产品)
{
如果您想使用newtonsoft JSON.net,我将创建实现它的自定义结果。JavaScript需要如下:
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
您创建了一个新对象:new{}
然后将其与一些字段合并。因此,当它被发送回页面时,将有一个对象(result
)具有两个属性。显然,返回的对象不被称为result
,但这是在函数上下文中为它指定的名称
最后,因为您使用的是return Json
,所以还应该确保您的操作方法返回类型JsonResult
而不是ActionResult
。在后台ASP.NET团队扩展了ActionResult
,但他们还设置了一些属性,如内容类型,以确保web页面知道如何处理响应。它还使用JavaScript序列化程序正确序列化对象。参考:
公共异步任务SendInvite(
字符串(电子邮件、字符串产品)
{
如果您想使用newtonsoft JSON.net,我会创建实现它的自定义结果。我相信当您使用JSON(新的{a=1,b=1})
时,javascript函数处理程序应该是function(data){var a=data.a;var b=data.b}
。也就是说,js处理程序应该只有一个参数。尝试执行console.log(result_success);
在你的处理程序中查看你真正得到了什么,感谢大家的回答。你所有的时间都非常感谢……我相信当你做Json(新的{a=1,b=1})
时,javascript函数处理程序应该是函数(数据){var a=data.a;var b=data.b}
。也就是说,js处理程序应该只有一个参数。请尝试执行console.log(result\u success)
在你的处理程序中查看你真正得到了什么感谢大家的回答。非常感谢你所有的时间…是的,绝对同意这一点,但是,你是否也可以指出,你应该返回JsonResult
而不是ActionResult
…是的,绝对同意这一点,但是,您是否可以指出,您应该返回JsonResult
,而不是ActionResult
…这将不起作用,因为success函数只有一个对象作为参数,而不是两个!这将不起作用,因为success函数