我正在使用google recaptcha,而我正在尝试将响应放入observable,然后将其发送到后端服务器。我正在努力,但我失败了。这是代码。
<div class="form-group">
<div class="col-sm-8">
<div class="g-recaptcha" data-sitekey="############"></div>
</div>
</div>
下一段代码在带有knockout的js文件中
self.recaptchaCode = ko.observable($('.g-recaptcha-response').val()); // Does not work
这是发送到后端的ajax
$.ajax({
type: 'POST',
url: BASEURL + 'index.php/login/loginUsingAjax/' + auth,
contentType: 'application/json; charset=utf-8',
data: ko.toJSON({
email : self.eMail(),
password : self.passWord(),
recaptcha : self.recaptchaCode()
})
})
我想我没有得到正确的方法来获得可观察的反应
答案 0 :(得分:1)
这一行:
self.recaptchaCode = ko.observable($('.g-recaptcha-response').val());
使用您的元素在创建observable时所拥有的值设置observable 。当您请求可观察值(self.recaptchaCode()
)时,不重新评估;你收到一个缓存的回复。
这意味着只有在实例化viewmodel时元素的值可用时,您的代码才有效。 Knockout无法神奇地观察非数据绑定的DOM元素。
我建议创建一个方法而不是一个可观察的方法:
self.getRecaptchaCode = function() {
return $('.g-recaptcha-response').val();
};
最好是在元素上创建value
绑定,但我不确定您是否可以访问DOM的.g
部分...在这种情况下,您可以使用一个“真正的”淘汰赛方式:
<input data-bind="value: recaptchaCode">
在您的viewmodel中使用self.recaptchaCode = ko.observable()
。