【发布时间】:2015-02-23 13:12:00
【问题描述】:
我正在尝试在我的 MVC 站点中实现 reCAPTCHA,但除非我从表单提交它,否则它不会验证,如下所示:
@using(Html.BeginForm("VerifyCaptcha", "Signup") )
{
@ReCaptcha.GetHtml(theme: "clean", publicKey: "6LcnfAITAAAAAAY--6GMhuWeemHF-rwdiYdWvO-9");
<input type="submit" id="btnVerify" value="Verify" />
}
[HttpPost]
public ActionResult Index(PolicyModel model)
{
var result = ReCaptcha.Validate(privateKey: "THE_KEY");
return View();
}
我不想使用表单提交,因为我不想返回新视图。我所有的数据都被 ajax 以 json 形式推送。我想做的是:
$.ajax({
url: 'verifyCaptcha',
dataType: 'json',
contentType: "application/x-www-form-urlencoded",
type: "POST",
async: false,
success: function (response) {
alert(response);
},
error: function(response) {
alert('There was a problem verifying your captcha. Please try again.');
}
});
return valid;
[HttpPost]
public ActionResult VerifyCaptcha()
{
var result = ReCaptcha.Validate(privateKey: "THE_KEY");
return Json(result);
}
ajax 调用到达控制器,但 Validation 方法立即完成,就好像它甚至没有发出请求一样。如果验证码不在表单中,我不确定为什么验证总是失败 - 是否可能会丢失诸如公钥之类的信息?有解决办法吗?
编辑:添加了没有模型的 ajax 控制器操作方法。
【问题讨论】:
-
将按钮类型更改为按钮并在您的 ajax 中分配一个有效的 url,在您的按钮单击事件中编写 ajax
-
所以你在你的ajax代码中设置了
type : 'POST'?将您的代码置于完成状态更容易为您提供帮助 -
好的,你的ajax请求到达
Action还是没有? -
是的,确实如此。我有一种感觉,它丢失了公钥或其他东西,因为它总是返回 false,如此之快以至于它似乎甚至没有提交请求。
-
您必须将数据属性中的公钥作为 json 发送
标签: javascript jquery ajax asp.net-mvc forms