2010-11-11 113 views
2

我有一個視圖,它基本上由三種形式組成,都在它們自己的div內。使用ajax加載codeigniter中的視圖

在頁面加載我想要顯示的第一個窗體,其他兩個隱藏,如果驗證成功,那麼我希望第一個窗體隱藏並讓第二個窗體可見,等等。

我目前有他們在單獨的意見工作,但我不想頁面刷新。

我想使用ajax來完成所有這一切,這樣頁面就不會刷新,我之前沒有使用過ajax,所以任何幫助,提示等都會很棒。提前謝謝了。

回答

4

兩種方法,你可以這樣做:

一)把所有形式的一個觀點。設置你不需要顯示的CSS樣式:無;並只顯示一種形式。

b)創建控制器方法來顯示各個視圖。使用像JQuery這樣的JavaScript框架用Ajax顯示你的表單(例如使用load函數,調用你的控制器方法)。

+0

+1將ajax內容放入由控制器加載的視圖中的想法,沒有想到:) – 2011-06-23 23:03:23

0

Ajax非常友好,特別是使用jQuery。閱讀更多關於它的地方:jQuery.post()

您不需要爲每個控制器功能創建視圖,並且可以利用它並對控制器進行ajax調用。

有這樣做的明顯不同的方法,但爲了簡單起見,我在這裏寫了一個例子:

HTML:

<div id="form1"> 
    <form> 
     <input type="text" name="form1_input1" id="form1_input1" /> 
     <input type="text" name="form1_input2" id="form1_input2" /> 
     <input type="button" value="Next" name="form1_next" id="form1_next" /> 
    </form> 
</div> 

<div id="form2"> 
    <form> 
     <input type="text" name="form2_input1" id="form2_input1" /> 
     <input type="text" name="form2_input2" id="form2_input2" /> 
     <input type="button" value="Next" name="form2_next" id="form2_next" /> 
    </form> 
</div> 

<div id="form3"> 
    <form> 
     <input type="text" name="form3_input1" id="form3_input1" /> 
     <input type="text" name="form3_input2" id="form3_input2" /> 
     <input type="button" value="Next" name="form3_next" id="form3_next" /> 
    </form> 
</div> 

JQuery的:

$(document).ready(function() { 
    $("#form2").hide(); // hides form2 and form3 elements on document load 
    $("#form3").hide(); 

    $("#form1_next").click(function() { 
     var form1_input1 = $("#form1_input1").val(); // retrieve values from input 
     var form1_input2 = $("#form1_input2").val(); 
      $.post("LINK-TO-CONTROLLER", { form1_input1: form1_input1, form1_input2: form1_input2 }, 
       function(data){ 
        $("#form1").hide(); 
        $("#form2").show(); // shows form 2, hides form 1 
      }); 
    }); 

    $("#form2_next").click(function() { 
     var form2_input1 = $("#form2_input1").val(); // retrieve values from input 
     var form2_input2 = $("#form2_input2").val(); 
      $.post("LINK-TO-CONTROLLER", { form2_input1: form2_input1, form2_input2: form2_input2 }, 
       function(data){ 
        $("#form2").hide(); 
        $("#form3").show(); // shows form 2, hides form 1 
      }); 
    }); 

    $("#form3_next").click(function() { 
     var form3_input1 = $("#form3_input1").val(); // retrieve values from input 
     var form3_input2 = $("#form3_input2").val(); 
      $.post("LINK-TO-CONTROLLER", { form3_input1: form3_input1, form3_input2: form3_input2 }, 
       function(data){ 
        $("#form3").hide(); // finish 
        alert("COMPLETE!"); 
      }); 
    }); 
}); 

在PHP CodeIgniter中: 012你可以使用$ this-> input-> post(「form1_input1」)來檢索帖子變量。等...你不需要返回意見。

function my_controller_form_one() { 
    $input_one = $this->input->post("form1_input1"); 
    $input_two = $this->input->post("form1_input2"); 
    $this->my_model->doSomething($input_one, $input_two); 
    return true; // need not return anything, really. Unless you are doing server-side validation stuff. 
}