2012-03-26 3 views
1

페이지의 여러 가지 요소를 이끌어내는 주요 선택 목록이 있습니다. 코스를 선택하면 다른 선택리스트가 코스 시작 날짜와 함께 최대 6 개월 전에 미리 채워집니다. 또한 페이지에 학생 이름과 전화 번호가있는 테이블이 있습니다. 코스를 선택하면 해당 코스에 등록한 모든 학생이 테이블에 다시 채워집니다. 내 문제는 PHP에서 JSON, 즉 학생과 시작 날짜를 통해 다양한 다양한 것들을 얻게 될 것입니다. 따라서 어떻게 jQuery에 둘 이상의 것을 전달할 수 있습니까? 코스 선택리스트가 2, 3, 5 또는 심지어 10의 2 가지 영향을받는다면 어떨까요? PHP와 jQuery로 어떻게 처리 할 수 ​​있습니까?PHP에서 jQuery/AJAX로 여러 데이터를 전달하려면 어떻게해야합니까?

foreach($m as $meta) 
{ 
     $metaCourse = $this->getCourseInfo($meta['parent_course']); 

     //populate the select list with the name of each course 
     $metaSelectList .= '<option id="select'.$count.'" value="'.$metaCourse['id'].'">'.$metaCourse['fullname'].'</option>'; 
     $count++; 

     //get only the first course's dates 
     if($count3 == 1) 
     { 
       $startDate = intval($course->getStartDate(50)); 
       $endDate = strtotime('+6 month', $startDate); 

       //populates the select list with the starting date of the course up to the next six months 
       for($date = $startDate; $date <= $endDate ; $date = strtotime('+1 day', $date)) 
       { 
         $dateSelectList .= '<option id="select'.$count2.'" value="'.$date.'">'.date('D d F Y', $date).'</option>'; 
         $count2++; 
       } 
       $count3++; 
       $students = $s->getStudents($metaCourse['id']); 
       $content = $this->createStudentTable($students); 

     } 
} 

이것은 (난 아직도 jQuery를에 여러 데이터를 전달하는 방법을 알아 내려고 노력하고있어 나는 아직 학생 테이블을 구현하지 않은) 지금은 ... AJAX에 대한 내 처리기입니다. 기본적으로 코스가 선택 될 때마다 PHP는 적절한 날짜로 새 선택 목록을 만든 다음 jQuery로 전달합니다. JavaScript 또는 PHP에서이 작업을 수행해야하는지 잘 모르겠습니다.

if (isset($_GET['pid']) && (isset($_GET['ajax']) && $_GET['ajax'] == "true"))//this is for lesson select list 
{ 
     $pid = intval($_GET['pid']); 
     $c = new CourseCreator(); 
     $startDate = intval($c->getStartDate($pid)); 
     $endDate = strtotime('+6 month', $startDate); 
     $dateSelectList = '<select name="dateSelect" id="dateSelect">'; 

     //populates the select list with the starting date of the course up to the next six months 
     for($date = $startDate; $date <= $endDate ; $date = strtotime('+1 day', $date)) 
     { 
       $dateSelectList .= '<option id="select'.$count2.'" value="'.$date.'">'.date('D d F Y', $date).'</option>'; 
       $count2++; 
     } 

     $dateSelectList .= '</select>'; 

     echo json_encode($dateSelectList); 
     exit; 
} 

내 jQuery를 핸들러 :

$('#metaSelect').live('change', function() 
{ 
    $.getJSON('?ajax=true&pid='+$('#metaSelect').val(), function(data) 
    {   
     alert(data); 
     $('#dateSelectDiv').html(data); 
    }); 

}); 

답변

1

당신은 쉽게

그러나

하는 확장 (이미 기본에 넣어하는의 것) JSON을 통해 HTML로 PHP에서 데이터를 많이 전달할 수 있습니다 당신이 가지고있는 것 - 빠른 예를 들어보세요.

<?php 
    $arrayOfStuff = array("theKey" => "theEntry", 123 => "Bob Dow", 56 => "Charlie Bronw", 20 => 'Monkey!', "theMyID" => $_POST['myID']); 
    echo json_encode($arrayOfStuff); 
?> 

HTML쪽에. 장기적으로

<script> 
    $.post("/theurl/", {type: "fetchArrayOfStuff", myID: 24}, function(success) { 
     //your success object will look like this 
     /* 
      { 
      theKey: 'theEntry', 
      123: 'Bob Dow', 
      56: 'Charlie Bronw', 
      20: 'Monkey!', 
      theMyID: 24 
      } 
     so you can easily access any of the data. 
        alert(success.theKey); 
        alert(success[123]); 
        alert(success[56]); 
        alert(success[20]); 
        alert(success.theMyID); 

     */ 

     //we can iterate through the success JSON!   
     for(var x in success) { 
      alert(x + "::" + success[x]); 
     }; 
    }, "json"); 
</script> 

- 백엔드셔서 당신의 더 나은 백엔드 물건을하고, 프론트 엔드는 프런트 엔드 물건을.

이것은 무엇을 의미하므로, 백 엔드에서 멀리 가능한 HTML 생성을 계속 시도 대신에 지속적으로 전달

for($date = $startDate; $date <= $endDate ; $date = strtotime('+1 day', $date)) 
    { 
      $dateSelectList .= '<option id="select'.$count2.'" value="'.$date.'">'.date('D d F Y', $date).'</option>'; 
      $count2++; 
    } 

당신 수 아마도

$date = $startDate; 
    $myJson = array() 
    while($date <= $endDate) { 
     $myJson[] = array("date" => $date, "formattedDate" => date('D d F Y', $date)); 
     $date += 86400; //86400 is the value of 1 day. 
    } 
    echo json_encode($myJson); 

그리고 당신은 할 수 HTML 코드에서 간단한 반복 만하면됩니다.

<script> 
    $.get("/", {ajax: true, pid: $('#metaSelect').val()}, function(success) { 


     //we can iterate through the success JSON!   
     var _dom = $('#dateSelectDiv').html(''); //just to clear it out. 

     for(var x in success) { 
      _dom.append("<option value='"+success[x].date+"'>"+success[x].formattedDate+"</option>"); 
     }; 
    }, "json"); 
</script> 

그래서 당신이 볼 수있는 - http://api.jquery.com/jQuery.get/, http://api.jquery.com/jQuery.post/ - - 당신은 아마에 문서의 일부를 보면

JSON

를 사용하여 데이터 많이 전달할 수 있습니다 더 많은 아이디어를 줄 수 있습니다.

당신에게 행운을 빕니다

+0

덕분에 : 네, 그래서 백엔드에서 HTML을 생성하지 않습니다 jQuery를에 모든 PHP 물건을 이동하는 것입니다 내 계획입니다. 방금 jQuery에 큰 데이터를 전달하는 방법을 찾아야했습니다. –

+0

방금 ​​스 니펫을 구현했으며 환상적으로 작동합니다. 고마워요 :) –

+0

달콤한, 듣고 다행 :) – DdD

관련 문제