【发布时间】:2012-10-08 20:13:23
【问题描述】:
我正在尝试使用 google 的 reCaptcha 在表单验证中处理验证码。基本上,我的验证函数是在表单标签中使用 onSubmit 调用的,然后调用第二个函数来处理 recaptcha api。
代码如下:
var returnValue;
var myData = {
privatekey : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
remoteip : ip,
challenge : challenge,
response : response
};
$.ajax({
url: "http://www.google.com/recaptcha/api/verify",
type: "POST",
data: JSON.stringify(myData),
dataType: "text",
success: function(data) {
var result = data.split("\n");
if (result[0] == "true") {
returnValue = true;
}
else {
returnValue = false;
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert("There was an error submitting the captcha. Please contact an administrator. \n\nError:\n" + textStatus, errorThrown);
returnValue = false;
},
complete: function(jqXHR, textStatus) {
return returnValue;
}
});
在 Firefox 中使用 LiveHTTPHeaders,我可以看到请求发送到服务,并且看起来一切都被正确发送。我得到一个 HTTP/1.1 200 OK 响应,但每次代码都进入错误函数。错误函数运行时,jqXHR为:
对象 { readyState=0, status=0, statusText="error"}
textStatus 是“错误”,errorThrown 是“”
我尝试了多种方法,包括 $.POST,以及使用 .done()、.fail()、.always(),但它的行为始终相同。
我在这里看到了一些与跨域请求问题有关的其他帖子,但这些情况似乎都不相关,因为我实际上正在执行跨域请求,而这些似乎是问题他们正在向同一域中的文件发出请求,并且作为跨域请求被错误地处理。
我在这里束手无策。任何帮助将不胜感激。
【问题讨论】:
-
您可能不应该在 SO 问题中发布您的私钥。
-
附注:
I've tried doing this a number of ways, including $.POST, and using .done(), .fail(), .always(), and it always behaves the same.这三种方法的目的与错误、成功和完成相同。现在应该在功能上有所不同,除了它们现在在准备成功时首选,错误和完成将根据文档在未来被弃用。
标签: javascript jquery ajax cors recaptcha