如何将PHP中的多个数据传递给jQuery/AJAX?

如何将PHP中的多个数据传递给jQuery/AJAX?

问题描述:

我有一个主要的选择列表的驱动器上的各种事情的课程。当选择课程时,另一个选择列表将被重新填入,并且该课程的开课日期可提前6个月。此外,我在学生的姓名和电话号码页面上有一个表格,当选择一门课程时,表格将与所有注册该课程的学生重新填写。我的问题是我会通过JSON从PHP获取各种不同的东西,即学生和开始日期。因此,我如何将多个事件传递给jQuery?如果课程选择列表不仅影响2件事,而且影响3,5或甚至10件?我们如何处理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); 

     } 
} 

这是我对AJAX的处理程序...现在(我还没有实现学生的表格中,因为我仍然在试图弄清楚如何将多个数据块传递给jQuery的)。基本上每次选择课程时,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); 
    }); 

}); 

你可以很容易地通过JSON(你好像把在已基本)

但是扩大通过从PHP数据ALOT到您的HTML你有什么 - 继承人一个快速的例子

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

从长远来看 - 你MUCH让后端的更好做后端的东西,并且前端做前端的东西。

这句话的意思是,尝试从后端保持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> 

因此,大家可以看到 - 你可以通过很多使用JSON

也许看一些文档数据的 - http://api.jquery.com/jQuery.get/http://api.jquery.com/jQuery.post/ - 可能会给你更多的想法。

祝您好运给你

+0

谢谢:)是啊,这是我的计划是到所有的PHP的东西搬到jQuery的,所以我不会在后台进行生成HTML。我只需要找到一种方法将大数据传递给jQuery – 2012-03-26 20:56:45

+0

我刚刚实现了您的代码片段,它们的工作非常棒。非常感谢:) – 2012-03-27 09:56:52

+0

甜蜜,很高兴听到:) – DdD 2012-03-28 02:09:15