2014-10-21 2 views
0

각 테이블에는 사용자가 해당 제품을 선택할 수있는 체크 박스가있는 제품 목록이 있습니다. 사용자가 버튼을 클릭하면 선택한 제품에 대해 다른 작업을 수행 할 수 있기를 원합니다.Codeigniter JQuery를 통해 컨트롤러 함수를 호출하는 방법

지금까지 선택한 제품의 ID 배열을 만드는 버튼에 JQuery 코드가 첨부되었지만 이제 막혔습니다. 이 단계에서 컨트롤러를 호출하고 배열을 전달할 수 있기를 바랍니다. 그런 다음 선택한 항목에 대한 작업을 수행하고 예를 들어 다른보기에서 결과를 표시 할 수 있습니다. 다음과 같이

내 JQuery와 코드는 다음과 같습니다 (이 디버깅 메시지를 많이 들어 있으므로 매우 자세한입니다)

/* 
Respond to the clicking of the 'With Selected->[Update Retail Outlets]' button 
*/ 
$('#btn_uro').click(function() { 
    alert('Update Retail Outlets'); 
    var w = 0; 
    var str_status; 
    var sel_array = []; 
    $('.chk_sel_pdt').each(function() { 
     var $this = $(this); 
     if ($this.is(':checked')) { 
      str_status = "Checked"; 
      sel_array.push($this.val()); 
     } else { 
      str_status = "Unchecked"; 
     } 
     console.log (w + ": " + $(this).val() + " - " + str_status); 
     w++; 
    }); 
    console.log(sel_array); 

    // now try to send the array to a CI controller so that it can process the 
    // update request. 

여기에서 컨트롤러 함수를 호출 sel_array [] 그것을 전달할 수있는 방법을 누군가는 말해 줄 수 . 이것이 잘못된 접근 방식 일 수 있음에 감사 드리며 대체로 제안 해 주시기 바랍니다.

미리 감사드립니다. G.

답변

0

대신 배열로 변환 당신은 당신의 코드

var selectedProducts = ""; 
$('.chk_sel_pdt').each(function() { 
    var $this = $(this); 
    if ($this.is(':checked')) { 
     str_status = "Checked"; 
     selectedProducts += $this.val()+","; 
    } else { 
     str_status = "Unchecked"; 
    } 
    console.log (w + ": " + $(this).val() + " - " + str_status); 
    w++; 
}); 

에 ID의 문자열을 같이 연결할 수 있으며, 포스트 속성

$.ajax({ 
     url: "controller_name/action_name", 
     data:{ selected_products: selectedProducts}, 

}); 
로 기능을 컨트롤러에 아약스 호출에이 데이터를 전송

컨트롤러에서 이러한 글꼴을 배열로 변환하고 비즈니스 로직을 수행하려면 PHP explode을 사용할 수 있습니다.

아약스 성공에 따라 응답에 따라 UI 요소로 무엇이든 할 수 있습니다. Uzair

+0

감사합니다. Uzair, 매우 우아한 솔루션입니다. 그러나 컨트롤러 함수를 호출하면 실행되지 않습니다. 즉, 컨트롤러 함수는 뷰를로드하지만 뷰는 나타나지 않습니다. Firebug를 사용하여 GET 구조체를 검사 할 경우 HTML 탭에 View가 모두 있지만 CI가 브라우저에로드하지 않습니다. 어떤 아이디어? 감사. – unplugngo

+0

안녕하세요 unplugngo, 당신은 $ html = $ this-> load-> view ($ view_name, $ data, true)와 같은 변수에 그 HTML을 반환해야합니다; 해당 뷰를 변수에 저장하고 해당 변수를 (json에서 선호하는) ajax 응답으로 반환하고 json 성공을 json으로 파싱하고 html 데이터를 jQuery $ (element) .html() 메서드를 사용하여 원하는 곳에 표시합니다. 건배 – Uzair

0

Uzair으로 제공되는 로직을 코딩하는 것이 좋다

해피. 경우에 당신이 AJAX 호출을 할 해달라고하면 다음 아래 코드는

$('#btn_uro').click(function() { 
    alert('Update Retail Outlets'); 
    var w = 0; 
    var str_status; 
    var sel_str = ""; 
    $('.chk_sel_pdt').each(function() { 
     var $this = $(this); 
     if ($this.is(':checked')) { 
      str_status = "Checked"; 
      if(sel_str == "") 
       sel_str = $this.val(); 
      else 
       sel_str = sel_str + "," + $this.val(); 
     } 
     console.log (w + ": " + $(this).val() + " - " + str_status); 
     w++; 
    }); 
    console.log(sel_str); 
    $form = $('<form>'); 
    $form.attr('action',"ACTUAL URL").attr('method','POST'); 
    $('<input />').attr('type', 'hidden').attr('name','selectedproducts').attr('value',sel_str).appendTo($form); 
    $form.appendTo('body'); 
    $form.submit(); 
}) 

도움이 될 것이라는 점에 추가 당신은 당신의 컨트롤러에 post 변수로 selectedproducts를 얻을 수 있습니다.

+0

고맙습니다 - 아주 잘 작동합니다. 아직 모든 것을 이해할 수 있는지 확실하지 않지만 나중에 드릴 다운하겠습니다. 좋은 한 :-) – unplugngo

관련 문제