2010-06-25 2 views
0

Я хотел спросить, почему ответ от запроса ajax с использованием родного ajax не публикуется или возвращает мою всю страницу? есть ли что-нибудь, что я должен знать? Я просмотрел документацию на jquery.com, и ничего не упоминается о чем-то подобном, если я не ищу другого места. Могу ли я получить помощь в том, почему это происходит?jquery ajax codeigniter

Это функция, которая обрабатывает валидацию рассматриваемой формы.

Джо

function showsupport() 
{ 
    $this->form_validation->set_rules('supportername','Your Name','trim|required|max_length[20]|xss_clean'); 
    $this->form_validation->set_rules('supporteremail','Email Address','trim|required|valid_email|xss_clean'); 
    $this->form_validation->set_rules('pledgedate','Pledge Date','trim|required|xss_clean'); 
    $this->form_validation->set_rules('messagetxt','Your Message','trim|required|xss_clean'); 

    if($this->form_validation->run() == FALSE) 
    { 
     echo validation_errors(); 
    } else { 

     $this->load->model('support_m'); 
     $name = $this->input->post('supportername'); 
     $email = $this->input->post('supporteremail'); 
     $date = $this->input->post('pledgedate'); 
     $msg = $this->input->post('messagetxt'); 

     $qry = $this->support_m->storepledge($name,$email,$date,$msg); 

     if($qry){ 
     //$this->template->write_view('content','thanks'); 
     //$this->template->render(); 
     $datamsg['supportmsg'] = 'Message Added Successfully'; 
     }else{ 
      echo 'There was an error inserting into db'; 
     } 
    } 
} 

Это мнение с формой генерируемой.

<?php 
            $formdata = array('id'=>'suppform'); 
            echo form_open('homepage/showsupport',$formdata); 

            $namedata = array('name'=>'supportname','id'=>'supportname','size'=>'30','max_length'=>'25','value'=>set_value('supportname')); 
            echo '<label for="supportername">Your Name:'.form_input($namedata).'</label><br /><br />'; 
            $emaildata = array('name'=>'supporteremail','id'=>'supporteremail','size'=>'30','max_lenth'=>'25','value'=>set_value('suppoteremail')); 
            echo '<label for="supporteremail">Email Address:'.form_input($emaildata).'</label><br /><br />'; 
            $pledgedata = array('name'=>'pledgedate','id'=>'pledgedate','size'=>'30','max_length'=>'20','value'=>set_value('pledgedate')); 
            echo '<label for="pledgedate">Today\'s Date:'.form_input($pledgedata).'</label><br /><br />'; 
            $msgdata = array('name'=>'messagetxt','id'=>'messagetxt','col'=>'2','rows'=>'8'); 
            echo '<label for="messagetext">Your Pledge:'.form_textarea($msgdata).'</label><br />'; 
            $submitdata = array('name'=>'submitbtn','id'=>'submitbtn','value'=>'Send'); 
            echo '<label for="submitbutton">'.form_submit($submitdata).'</label><br />'; 

            echo form_close(); 
           ?> 
      </div> 
     <div id="errorsechoed"><?php echo validation_errors();?></div> 

HTML, из retured страницы сваливается в DIV #errorsechoed

$('#suppform').submit(function(eve){ 
     eve.preventDefault(); 
    $.ajax({ 
    type: 'POST', 
      cache: false, 
    url: 'homepage/showsupport', 
    data: $('#suppform').serialize(), 
    beforeSend: function(){ 
       $('#supportform').block({message:'<h4> Processing...</h4>'}) 
    }, 
    complete: function(){ 

    }, 
    success: function(html){ 
       $('#errorsechoed').text(html); 
    } 

      }); 
}); 

Я пытался получить это понял, и я думаю, что я сделал некоторый прогресс, вот что у меня есть :

a) библиотека шаблонов от Уильяма Колина работает там, где указаны области, и поэтому только конкретная область будет обновляться все время, а не единственная страница. В результате это похоже на работу, отличную от других стандартных настроек для codeigniter. Это определенно мешает jQuery получить ответ от сервера. Он получает биты библиотеки шаблонов (т. Е. Области) и выводит их, что приводит к повторной перестройке всей страницы.

б) При запуске библиотеки form_validation, Template не позволяет просто загрузить вид нормальный путь в CodeIgniter, а это можно сделать, выполнив команду:

$this->template->write_view('contentregion','viewname'); //writes the view 

$ this-> template- > визуализации(); // отображает представление на экране.

так что если это не будет сделано, если проверка не удалась, сообщения об ошибках, выпрессованные библиотекой formvalidation, просто никогда не попадают в представление.

Я пробовал много перестановок с использованием функций, которые поставляются с этой библиотекой, и я все еще могу отобразить другую страницу моего сайта. путать

ВЫВОД:

Я думаю, что эта библиотека шаблонов является большим, но она нуждается в некотором обновлении, так что эти вопросы будут выполнены. Я должен буду смотреть на другие системы шаблонов, когда мне нужно сделать сайт с большим количеством аякса. Надежда Г-н Уильям может видеть это и помогать в этом.

Спасибо сообществу за проспект, чтобы сказать то, что я узнал. Надеюсь, это кому-то полезно.

+0

Можете ли вы привести пример кода, с которым работаете? – stormdrain

+0

, пожалуйста, проверьте, что я добавил, и дайте мне знать, если я делаю что-то неправильно. Спасибо, что я хочу помочь. –

+0

Можете ли вы разместить свой javascript-код? Я не вижу никакого AJAX, идущего здесь. –

ответ

1

Это потому, что вы устанавливаете тип данных в постбэка быть типа «HTML»:

«HTML»: Возвращает HTML в виде обычного текста; Введенные теги скриптов оцениваются при вставке в DOM.

если вы просто хотите, чтобы показать, что запрос успешно или не вы можете иметь #errorsindicated заселена примерно так:

success: function(){ 
      $('#errorsechoed').html('<h4> Request Successfull...</h4>'); 
} 
error: function(){ 
      $('#errorsechoed').html('<h4> Request Failed...</h4>'); 
} 

вы можете получить более подробную информацию о ошибке, если вы хотите. См. Раздел параметров ошибки в документации jQuery ajax: http://api.jquery.com/jQuery.ajax/

+0

Это решает проблему появления страницы в div # errorsechoed. только при проверке запроса с помощью firebug страница все равно отправляется. Я просмотрел документацию, но все равно перейду еще раз. благодаря –