CodeIgniter ajax调用使用jquery调用重定向时打印整个页面我div

时间:2012-02-05 02:56:43

标签: php jquery ajax codeigniter redirect

没有适合这个bug的标题但是这个怎么回事,我按下了一个提交按钮,当按下jquery ajax调用控制器并且表单验证完成如果失败则表单被重绘如果它通过页面被重定向到闪存消息成功的主页,以及发生错误的地方,它重新绘制内容中的整个页面(页眉页脚页脚)。我希望看到相信所以这是代码

旁注:“autform”是用于创建表单的库“rest”是用于模板的库。

jquery代码:

$("form.user_form").live("submit",function() {
  $("#loader").removeClass('hidden');
  $.ajax({
      async :false,
      type: $(this).attr('method'),
      url: $(this).attr('action'),
      cache: false,
      data: $(this).serialize(),
      success: function(data) {
                $("#center").html(data);
                     $('div#notification').hide().slideDown('slow').delay(20000).slideUp('slow');
                }
  })

  return false;
 }); 

控制器

 function forgot_password()
{
        $this->form_validation->set_rules('login',lang('email_or_login'), 'trim|required|xss_clean');
        $this->autoform->add(array('name'=>'login', 'type'=>'text', 'label'=> lang('email_or_login')));
        $data['errors'] = array();
        if ($this->form_validation->run($this)) {                               // validation ok
            if (!is_null($data = $this->auth->forgot_password(
                    $this->form_validation->set_value('login')))) {
                    $this-> _show_message(lang('auth_message_new_password_sent'));
            } else {
                $data['message']=$this-> _message(lang('error_found'), false);  // fail
                $errors = $this->auth->get_error_message();
                foreach ($errors as $k => $v){
                     $this->autoform->set_error($k, lang($v));
                }
            }
        }
        $this->autoform->add(array('name'=>'forgot_button', 'type'=>'submit','value' =>lang('new_password')));
        $data['form']=  $this->autoform->generate('','class="user_form"');
        $this->set_page('forms/default', $data);
        if ( !$this->input->is_ajax_request()) { $this->rest->setPage(''); }
        else { echo  $this->rest->setPage_ajax('content');       }
    }
}

function _show_message($message, $state = true)
{
    if($state)
    {
        $data = '<div id="notification" class="success"><strong>'.$message.'</strong></div>';
    }else{
        $data = '<div id="notification" class="bug"><strong>'.$message.'</strong></div>';
    }
    $this->session->set_flashdata('note', $data);
    redirect(base_url(),'refresh');
}

我认为好像重定向调用是由ajax捕获的,而不是向我发送主页,而是在表单的位置加载主页。

感谢您的帮助 问候

2 个答案:

答案 0 :(得分:2)

确定发现问题和解决方案,似乎你不能在Ajax调用中调用重定向,试图将一大块HTML返回到div,结果将重定向的HTML放在div中。

PhilTem http://codeigniter.com/forums/viewthread/210403/建议的解决方案 当你想要重定向并且由Ajax进行调用然后将带有重定向URI的值返回给Ajax并让它重定向。

对于对代码感兴趣的人:

Jquery Ajax代码:

$("form.user_form").live("submit", function(event) {
  event.preventDefault();
  $("#loader").removeClass('hidden');
  $.ajax({
      type: $(this).attr('method'),
      url: $(this).attr('action'),
      cache: false,
      dataType:"html",
      data: $(this).serialize(),
      success: function(data) {
          var res = $(data).filter('span.redirect');
          if ($(res).html() != null) {
              [removed].href=$(res).html();
              return false;
          }
          $("#center").html(data);
      },
      error: function() {

      }
  })
  return false;
});  

PHP 控制器

function _show_message($message, $state = true, $redirect = '')
{
    if ($state)
    {
        $data = '<div id="notification" class="success"><strong>'.$message.'</strong></div>';
    } else {
        $data = '<div id="notification" class="bug"><strong>'.$message.'</strong></div>';
    }

    $this->session->set_flashdata('note', $data);

    if ( !$this->input->is_ajax_request())
    {
        redirect(base_url() . $redirect, 'location', 302);
    }
    else
    {
         echo '<span class="redirect">'.base_url().$redirect.'</span>';
    }

}

答案 1 :(得分:0)

只使用个别错误

json_encode(array(
   'fieldname'  =>  form_error('fieldname')
));

AJAX

success: function(cb)
{
    if(fieldname)
    {
       {fieldname}.after(cb.fieldname)
    }
}

请参阅this