CodeIgniter AJAX вызова с использованием JQuery при перенаправлении вызова он печатает всю страницу я дел - PullRequest
1 голос
/ 05 февраля 2012

нет заголовка, который подходит для этой ошибки, но вот как это происходит, у меня есть форма с кнопкой отправки, когда нажата 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, и вместо того, чтобы отправить мне домашнюю страницу, она загружает домашнюю страницу вместоform.

спасибо за любую помощь с уважением

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

OK нашел проблему и решение, казалось, вы не можете вызвать перенаправление в середине вызова 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>';
    }

}
0 голосов
/ 05 февраля 2012

просто используйте отдельные ошибки

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

AJAX

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

см. это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...