2015-02-23 48 views
0

我想在我的MVC的网站使用reCAPTCHA,但它不验证,除非我从一个表单提交,就像这样:提交数据VS数据从阿贾克斯

@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(); 
    } 

我不不想使用表单提交,因为我不想返回新的视图。我所有的数据都以json形式被ajax推送。我想要做的是:

$.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调用获取到控制器,但验证方法立即完成,仿佛它甚至没有得到提出要求。我不确定为什么验证总是失败,如果验证码不在表单中 - 它是否会丢失信息,如公钥或什么?有没有解决这个问题的方法?

编辑:添加了没有模型的ajax控制器操作方法。

+0

更改按钮类型为按钮,并在您的ajax分配一个有效的网址,在您的按钮单击事件 – 2015-02-23 13:16:11

+0

内写入ajax,所以你在你的ajax代码中设置'type:'POST''?让你的代码处于完成状态,更容易帮助你 – sabotero 2015-02-23 13:22:21

+0

ok,你的ajax请求到达'Action'或者没有? – sabotero 2015-02-23 13:23:41

回答

1

只需使用serializeArray()serialize(),改变你的Ajax请求

$.ajax({ 
    url: 'verifyCaptcha', 
    dataType: 'json', 
    contentType: "application/x-www-form-urlencoded", 
    type: "POST", 
    async: false, 
    data: $('form').serializeArray(), // $('form').serialize(), 
    success: function (response) { 
      alert(response); 
     } 
}); 

你还没有添加在您的请求中的数据部分。这似乎是问题

+0

您好,先生,是让我的星期一可以忍受的人。完美地工作 - 非常感谢!你可能会对我为什么需要将数据作为数据传递给我们一些启示吗? – 2015-02-23 13:42:12

+1

简单的原因。您需要'数据'来验证请求。但是,既然你想将它作为表单响应,你需要构建你的数据对象并通过AJAX发送它。而且,由于您使用的是jQuery,因此您可以使用内置功能从表单中获取数据。 – 2015-02-23 14:42:05

0

您需要为表单请求设置包含所有参数的Ajax请求。例如内容类型为application/x-www-form-urlencoded

看看这个:application/x-www-form-urlencoded or multipart/form-data?

UPDATE:
...是...你必须做一个POST请求,而不是GET。

UPDATE:

$.ajax({ 
    url: 'verifyCaptcha', 
    contentType: "application/x-www-form-urlencoded", 
    type: "POST", 
    success: function (response) { 
     alert(response); 
    }, 
    error: function(response) { 
     alert('ERROR', response); 
    } 
}); 
+0

请参阅我的编辑。实际的ajax代码是完整的。问题是别的... – 2015-02-23 13:23:18

+0

好吧,只是看到你编辑。这是更完整的,但仍然是错误的:尝试与'content-type:“application/x-www-form-urlencoded”' – RikyTres 2015-02-23 13:26:52

+0

好吧,我做到了。仍然是一个问题。 – 2015-02-23 13:30:10