2010-06-25 54 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> 

的retured页面的HTML在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)William Colin的模板库在指定区域的情况下工作,因此只有特定区域会一直刷新,而不是唯一的页面。因此,它的工作方式与其他的codeigniter标准设置有所不同。这肯定会阻碍jquery从服务器获取响应。它获取模板库(即区域)的位并将其渲染,最终重新构建整个页面。

B)当您运行form_validation库,模板不允许你只需要加载一个视图以正常的方式在笨,而你通过运行做到这一点:

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

$这个 - >模板 - >渲染(); //在屏幕上呈现视图。

所以如果在验证失败的情况下没有这样做,那么formvalidation库吐出的错误消息就好像看不到视图。

我已经尝试了很多使用该库的函数的排列,并且仍然只能渲染出我网站的另一个页面。困惑

结论:

我觉得这个模板库是伟大的,但它需要一些更新,使得这些问题得到满足。当我必须做一个需要很多Ajax的站点时,我将不得不查看其他模板系统。希望威廉先生能看到这一点,并帮助研究这一点。

感谢社区大道说出我学到的东西。希望这对某人有用。

+0

您能否提供您正在使用的代码示例? – stormdrain 2010-06-25 17:51:38

+0

请检查我添加的内容,并告诉我是否做错了什么。感谢您愿意帮助。 – 2010-06-25 20:52:15

+0

你能发布你的JavaScript代码吗?我在这里看不到任何AJAX。 – 2010-06-25 22:53:27

回答

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中显示页面的问题。只有在用萤火虫检查请求时,页面仍然被发送。我已经看过文档,但仍会继续。谢谢 – 2010-06-26 17:07:24