2010-01-08 3 views
0

다음 컨트롤러와 뷰가 있습니다. 나는 codeigniter에서 jquery를 배우려고 노력하고있다.codeigniter에서 jquery를 코딩하는 방법

코드가 작동하지 않습니다. 그래서 나는 누군가 내가 잘못하고있는 것을 알아 내고 나를 바로 잡기를 바라고있다.

미리 감사드립니다.

class PhpJqueryBook extends Controller 
{ 

function __construct() 
{ 
    parent::Controller(); } 

public function index() 
{ 
... } 

function dynamic_select_boxes(){ 

    $this->load->view('dynamic_select_boxes'); 

} 

function get_cities(){ 

    switch(@$_POST['country']){ 
     case 'ie': // { ireland 
      $cities=array('Cork', 'Dublin', 'Galway', 'Limerick', 
       'Waterford'); 
     break; 
     // } 
     case 'uk': // { United Kingdom 
      $cities=array('Bath', 'Birmingham', 'Bradford', 
       'Brighton & Hove', 'Bristol', 
       'Cambridge', 'Canterbury', 'Carlisle', 
       'Chester', 'Chichester', 'Coventry', 
       'Derby', 'Durham', 'Ely', 'Exeter', 
       'Gloucester', 'Hereford', 'Kingston upon Hull', 
       /* and on and on! */ 
       'Newport', 'St David\'s', 'Swansea'); 
     break; 
     // } 
     default: // { else 
      $cities=false; 
     // } 
    } 
    if(!$cities)echo 'please choose a country first'; 
    else echo '<select name="city"><option>'.join('</option> <option>',$cities).'</select>'; 
} 
} 

보기/dynamic_select_boxes.php

<?php $this->load->view('inc/header')?> 

<form> 
<table> 
<tr><th>Country</th><td> 
<select name="country" id="country"> 
<option value=""> -- please choose -- </option> 
<option value="ie">Ireland</option> 
<option value="uk">Great Britain</option> 
</select> 
</tr> 
<tr> 
<th>Cities</th> 
<td id="cities">please choose a country first</td> 
</tr> 
</table> 
<?php $this->load->view('inc/footer')?> 

그리고 이것은 다음과 같은 HTML을 생성합니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<base href="http://127.0.0.1/ci_jquery/"> 
</head> 
<body> 

<form> 
<table> 
    <tr><th>Country</th><td> 
    <select name="country" id="country"> 
    <option value=""> -- please choose -- </option> 
    <option value="ie">Ireland</option> 
    <option value="uk">Great Britain</option> 
    </select> 
    </tr> 
    <tr> 
    <th>Cities</th> 
    <td id="cities">please choose a country first</td> 
</tr> 
    </table> 
    <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script> 


<script type="text/javascript"> 
    $(document).ready(setup_country_change); 
     function setup_country_change(){ 
      $('#country').change(update_cities); 
     } 
     function update_cities(){ 
      var country=$('#country').attr('value'); 
      $.get('phpjquerybook/get_cities/'+country, show_cities); 
     } 
     function show_cities(res){ 
      $('#cities').html(res); 
     }  
     </script> 


</body> 
</html> 

답변

1

컨트롤러의 메서드에서 세 번째 매개 변수를 얻으려면 메서드의 매개 변수를 사용하여 쉽게 얻을 수 있고, uri 클래스를 사용하면 세그먼트를 가져올 수 있습니다. 첫 번째 경우는

function get_cities($country = null){ 

    switch($country){ 

    .... 

passing uri parameters to controllersuri library에 대한 CodeIgniter의 사용 설명서를 참조 사용할 수 있습니다.

1

도시를 식별하는 방법 때문입니다. 이 줄에 jQuery로 Ajax를 통해 GET 요청을 전송됩니다

$.get('phpjquerybook/get_cities/'+country, show_cities); 

그러나, 당신의 get_cities() 기능, 당신은 요청 국가 $_POST을 확인하고 있습니다. $_POST은 GET 요청을 보내는 경우 비어 있습니다.

이 줄을 변경하는 것입니다 여기에서 할 수있는 가장 좋은 방법 :

switch(@$_POST['country']) 

switch($_GET['country']) 

에 대한 대체 솔루션 대신 $.post() 수 있도록 JQuery와 통화를 수정하는 것입니다.

특정 기능에 정말로 필요한 경우가 아니면 @ 연산자를 사용하지 않는 것이 좋습니다. $_POST['country']에 대한 오류가 표시되지 않으면이 사실을 알았을 것입니다. 실수를 억제하는 것보다 오류를 수정하는 것이 더 좋습니다.

+0

이것은 여러 가지 이유 때문에 잘못되었습니다. 1. 내 대답을 참조하십시오. 2. GET 매개 변수는 CI 입력 클래스로 필터링됩니다 (http://codeigniter.com/user_guide/libraries/input.html 참조). – Residuum

관련 문제