c# - Jquery ajax 请求显示 json 对象而不是警报
问题描述
提交表单后,显示 Json 对象而不是警报。我需要的是一个显示成功消息或错误的警报框。但是在提交表单时,它只显示返回的 JSON 对象。这是我的 MVC 控制器操作:
[HttpPost]
public ActionResult Subscribe(Subscriber Sub)
{
KeyGenerator Validate = new KeyGenerator();
string Email = Sub.Username.Trim();
bool IsValid = Validate.ValidateEmail(Email);
ENT Ent = new ENT();
if (IsValid)
{
Subscriber SubEmail = Ent.Subscribers.Where(a => a.Username == Email).FirstOrDefault();
if (SubEmail != null)
{
return Json(new { success = true, responseText = "Already subscribed!" }, JsonRequestBehavior.AllowGet);
}
else
{
Ent.AddToSub(Email);
return Json(new { success = true, responseText = "Thank you." }, JsonRequestBehavior.AllowGet);
}
}
else
{
return Json(new { success = false, responseText = "Invalid request." }, JsonRequestBehavior.AllowGet);
}
}
这是我的ajax请求:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">
$("#subscribe").submit(function(e) {
e.preventDefault();
var values = new FormData($(this));
$.ajax({
type: $(this).type,
url: $(this).action,
data: values,
processData: false,
contentType: false,
cache: false,
success: function (response) {
if (response.success) {
alert(response.responseText);
}
else {
alert(response.responseText);
}
},
error: function (response) {
alert(response.responseText);
}
});
});
如何显示警报而不是 JSON 对象?我的 JSON 响应如下:
{"success":true,"responseText":"Thank you."}
另外,这是因为请求页面是 PHP 吗?发出请求的页面位于 PHP 中的 https://MyWebUrl.com(Not real url) 上,MVC 网站位于 https://MySubDomain.MyWebUrl.com(Not real url) 这是原因吗?
解决方案
这可能不是解决方案,但这对我有用。由于我的问题中粗体字母中列出的原因,我做了一些更改。我将 MVC 操作更改为:
[HttpPost]
public ActionResult Subscribe(Subscriber Sub)
{
KeyGenerator Validate = new KeyGenerator();
string Email = Sub.Username.Trim();
bool IsValid = Validate.ValidateEmail(Email);
ENT Ent = new ENT();
if (IsValid)
{
Subscriber SubEmail = Ent.Subscribers.Where(a => a.Username.ToLower() == Email.ToLower()).FirstOrDefault();
if (SubEmail != null)
{
//return Json(new { success = true, responseText = "Already subscribed!" }, JsonRequestBehavior.AllowGet);
return RedirectToAction("ViewSubMsg", new { id = "Already subscribed!" });
}
else
{
Ent.AddToSub(Email);
//return Json(new { success = true, responseText = "Thank you." }, JsonRequestBehavior.AllowGet);
return RedirectToAction("ViewSubMsg", new { id = "Thank you!" });
}
}
else
{
//return Json(new { success = false, responseText = "Invalid request!" }, JsonRequestBehavior.AllowGet);
return RedirectToAction("ViewSubMsg", new { id = "Invalid request!" });
}
}
然后我添加了一个新动作:
[HttpGet]
public ActionResult ViewSubMsg(string id)
{
if (string.IsNullOrEmpty(id))
{
return Redirect("mysiteurl");
}
else
{
ViewBag.Msg = id;
return View();
}
}
及其观点:
//View
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ViewSubMsg</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<script>
$(document).ready(function () {
alert("@ViewBag.Msg");
window.location.replace("mysiteurl");
});
</script>
</body>
</html>
推荐阅读
- javascript - TypeError: xxx.flatMap 不是函数
- javascript - 如何更改引导选择颜色
- c - C-Codeforces 中的未定义行为
- ios - Firestore 文档调用在一个视图控制器中工作,但在另一个视图控制器中不工作
- xml - XSD 条件元素
- azure - 如何使用 REST api 调用为特定用户获取 Azure 分析服务服务器中数据模型的权限
- php - phpCAS::setDebug() 已被弃用,取而代之的是 phpCAS::setLogger()
- c++ - 使用推力::transform_reduce 转换数组(包含扫描不是答案)
- google-bigquery - BigQuery 外部表缓存结果缓存,如果我们添加新文件会自动失效吗?
- javascript - D3 style("Top") 没有将我的圈子设置在正确的 "y" 位置