我的所有其他搜索都会产生有关跨域请求的响应。看来我没有遇到问题。我从recaptcha服务器得到了回复,但它没有被正确解释。
<script>
function verifyCaptcha() {
jQuery.ajax({
method: "POST" ,
url: "https://www.google.com/recaptcha/api/siteverify",
data: { secret: "xxxxxxxxxxxxxxxxxxx" , response: "<% $recaptcha_response %>" },
dataType: 'jsonp' ,
success: function( result ) {
alert( result.success ) ;
},
error: function( xhr ) {
alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' Response Text: ' + xhr.responseText);
}
})
}
onload=verifyCaptcha ;
</script>
此功能位于提交表单的目标页面中。当我检查fireBug的结果时,我会在警报消息中看到:
Request Status: 200 Status Text: success Response Text: undefined
FireBug捕获的响应是
{
"success": true
}
看起来如果没有围绕返回的JSON的parens就会生气,我认为它应该是免费的dataType: 'jsonp'
如何解决此问题的成功?
更新
向错误函数添加其他返回参数:( xhr , message , errorThrown )
产生以下内容:
Request Status: 200
Status Text: success
Response Text: undefined
Message: parsererror
ErrorThrown: Error: jQuery1120043068059910713263_1455115913634 was not called
我猜测jQuery1120043068059910713263_1455115913634 was not called
消息是jQuery随机命名的回调函数。这是否意味着我需要在逻辑中添加一些东西,或者reCaptcha服务器确实不支持jsonp?
将dataType
设置为"json"
会使我的请求状态为0。
更新2
我将此添加到我的功能中:
jsonp: false,
jsonpCallback: 'onJSONPLoad',
我的errorThrown
文字更改为:
Error: onJSONPLoad was not called
让我得出结论,reCaptcha不支持jsonp
。谁能证实这一点?
答案 0 :(得分:0)
我猜答案是:
POST方法不适用于jsonp,只有GET
更新
在评论声明中将dataType设置为"json"
并且它会自动转换为jsonp,也许会尝试
你也可以在错误函数
中添加第三个参数error: function( xhr, message, errorThrown ) {
和errorThrown可能更明确