2012-03-26 9 views
1

Ich habe eine Hauptauswahlliste von Kursen, die verschiedene Dinge auf einer Seite antreibt. Wenn ein Kurs ausgewählt wird, wird eine weitere Auswahlliste mit dem Startdatum des Kurses bis zu 6 Monate im Voraus neu gefüllt. Außerdem habe ich eine Tabelle auf der Seite mit dem Namen und der Telefonnummer des Schülers. Wenn ein Kurs ausgewählt wird, wird der Tisch mit allen Schülern neu gefüllt, die sich für diesen Kurs angemeldet haben. Mein Problem ist, dass ich verschiedene Dinge von PHP über JSON bekommen werde, also die Studenten und das Startdatum. Wie kann ich also mehr als eine Sache an jQuery weitergeben? Was, wenn die Kursauswahlliste nicht nur 2 Dinge betrifft, sondern 3, 5 oder sogar 10? Wie würden wir das mit PHP und jQuery handhaben?Wie kann ich mehrere Daten von PHP an jQuery/AJAX übergeben?

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); 

     } 
} 

Dies ist mein Handler für die AJAX ... FOR NOW (ich nicht die Studenten Tabelle noch nicht umgesetzt haben, wie ich bin immer noch versuchen, herauszufinden, wie mehrere Stücke von Daten zu jQuery passieren). Jedes Mal, wenn ein Kurs ausgewählt wird, erstellt PHP eine neue Auswahlliste mit den entsprechenden Daten und übergibt sie dann an jQuery. Ich bin mir nicht sicher, ob ich das in JavaScript oder in PHP machen sollte.

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; 
} 

Meine jQuery-Handler:

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

}); 

Antwort

1

Sie können ganz einfach eine Menge von Daten von PHP zu Ihrem HTML über JSON übergeben (die Sie bereits in dem Grunde gestellt von scheinen)

jedoch zu erweitern auf was Sie haben - hier ein schnelles Beispiel

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

Auf Ihrer HTML-Seite.

<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> 

Auf lange Sicht - Ihr viel besser von den Backend lassen Sie die Back-End-Zeug, und das vordere Ende des Front-End-Zeug zu tun.

Was dies bedeutet, ist, versuchen Sie die HTML-Generierung halten so weit weg wie möglich von der Back-End, so anstatt ständig von vorbei

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++; 
    } 

Sie könnten vielleicht

$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); 

Und Sie können Machen Sie einfach eine einfache Wiederholung Ihres HTML-Codes.

<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> 

So wie Sie sehen können - können Sie eine Menge von Daten passieren JSON mit

Vielleicht auf einige der Dokumentation finden - http://api.jquery.com/jQuery.get/, http://api.jquery.com/jQuery.post/ - könnte man mehr Ideen.

Viel Glück für Sie

+0

Thanks :) Ja, das ist mein Plan, die alles, was PHP Zeug zu jQuery zu bewegen ist, damit ich nicht HTML im Backend werden zu generieren. Ich musste nur einen Weg finden, um große Daten an jQuery –

+0

zu übergeben Ich habe gerade Ihre Schnipsel implementiert und sie arbeiten fantastisch. Vielen Dank :) –

+0

süß, froh, das zu hören :) – DdD