我正在尝试使用codeigniter验证我的第一个ajax表单提交。这是一个简单的评论字段,带有Recaptcha。我确保表单在没有ajax的情况下正确验证并正常工作,然后再添加它。
我为ajax处理表单提交创建了一个新方法。它本质上是非ajax方法中代码的精确副本,除非存在提交错误,它将表单视图(带有错误)加载到变量中,json_encodes它并通过ajax将其发回。一切看起来都正常。它发回的表单包含验证错误,但是当我将表单加载到元素中时,我得到一个未定义的RecaptchaState错误。然后重定向到空白页。
这是我的方法:
function submit_review()
{
$this->load->library('form_validation');
$this->load->library('recaptcha');
$this->lang->load('recaptcha');
$rules = array(
array(
'field' => 'review',
'label' => 'Review',
'rules' => 'trim|required|xss_clean|strip_tags'
),
array(
'field' => 'recaptcha_response_field',
'label' => 'lang:recaptcha_field_name',
'rules' => 'required|check_captcha'
)
);
$this->form_validation->set_rules($rules);
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
if ($this->form_validation->run() == FALSE)
{
// set the view variables
$form_data['recaptcha'] = $this->recaptcha->get_html();
$form_data['id'] = $this->input->post('id');
$response['form'] = $this->load->view('dynamic/post_review_form', $form_data, TRUE);
}
else
{
// all validation tests passed
}
echo json_encode($response);
}
这是我的jquery代码:
$("#review_submit").click(
function(event){
event.preventDefault();
var str = $("form").serialize();
$.ajax({
type: "POST",
url: "<?= base_url() ?>ajax/submit_review",
dataType: "json",
data: str,
cache: false,
success:
function(data){
$("#post_review_wrapper").html(data.form);
}
});
});
我完全不知道为什么recaptcha使用ajax给我一个错误,但正常工作正常。在此先感谢您的帮助!
答案 0 :(得分:0)
似乎有许多问题可能会导致问题(Need help with reCAPTCHA - keep getting incorrect-captcha-sol,reCaptcha Issues with Ajax等),但我在网上找到的解决方案都与我无关。我最终弄清楚我的代码出了什么问题,希望它也会帮助你。
我正在使用jQuery编写查询字符串:
"&recaptcha_response_field="
但需要这样做:
"&recaptcha_response_field="
显然并不总是需要逃脱&符号。