如何将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/ - 可能会给你更多的想法。
祝您好运给你
谢谢:)是啊,这是我的计划是到所有的PHP的东西搬到jQuery的,所以我不会在后台进行生成HTML。我只需要找到一种方法将大数据传递给jQuery – 2012-03-26 20:56:45
我刚刚实现了您的代码片段,它们的工作非常棒。非常感谢:) – 2012-03-27 09:56:52
甜蜜,很高兴听到:) – DdD 2012-03-28 02:09:15