你如何将变量传递给javascript并从php返回?

时间:2013-03-08 16:00:30

标签: php javascript html variables

//Javascript
function updateStudentAttendance(event)
  {
    if ($(this).hasClass('here')) {
  $(this).removeClass('here');
  $(this).addClass('absent');
  var schoolId = $(this).children('p').attr('id');
  var studentId = $(this).attr('id');
  var classId = document.getElementById("classId").value;
  postAttendance(studentId, schoolId, classId, 'Absent');
}

function postAttendance(studentId, schoolId, classId, attendanceEvent)
{
  $.post('post_attendance.php', {
  'studentId': studentId,
  'schoolId': schoolId,
  'event': attendanceEvent,
  'classId': classId
}, function(data) {
 // alert(data);
});
}

//php code looks like this:
<?php
    print sprintf('<div id="%s" class="student span2 well well-small %s">
        <input type="hidden" id="classId" name ="classId" value="%s">'
        , $student->getId(), $class, $classId);
    print '<img src="img/userp.png" style="width: 100%; text-align: center;">';
    print sprintf('<p id="%s" style="text-align: center; font-size: 12px;">%s %s'
        , $_GET['schoolId'], $student->getFirstName, $student->getLastSurname());               
    print '</p>';
    print '</div>';
?>

我正在使用的代码从id中提取信息,我必须添加一个隐藏元素来获取classId。然后,我在修改后将其发回,以使用新信息更新数据库。我觉得这是一种非常奇怪的方法,并希望有一个更好的解决方案来传递这些变量。

请让我知道更好的方法。谢谢!

4 个答案:

答案 0 :(得分:2)

到PHP

使用jquery ajax或使用表单帖子

到JS

使用带有json编码值的隐藏输入字段(如果数据结构复杂)

答案 1 :(得分:0)

我认为你可以使用两种结构。

一个是HTML5 dataset,它允许您存储Web应用程序的自定义私有数据,这些数据不属于标记的语义。这比使用id更灵活,因为您只能拥有一个id,并且还有其他用途。您可以拥有多个class es,但这也很难使用。

第二个是hidden属性,它声明元素与页面的当前状态/用户无关。我有时会使用这个属性来创建组织与页面标记无关的应用程序数据的元素(我希望这是正确的用法,但我不是肯定的。)

答案 2 :(得分:0)

在你的jQuery $.post中添加一些json数据类型:

<强>的jQuery

 $.post('post_attendance.php', {data:value},
    dataType:"json"
}, function(data) {
   alert(data.error); //will be false
});

比你的post_attendance.php用json_encode回显你的结果:

$array = array('response'=>'Some value', error => false);
echo json_encode($array);

答案 3 :(得分:0)

您可以使用隐藏的输入字段,因此存储已编码的json。

$data = array(
    "key1" => "value1",
    "key2" => "value2"
);
$input = "<input type=\"hidden\" id=\"storage\" value=\"%s\" />";
printf($input, htmlspecialchars(json_encode($data)));

在jQuery上

var storage = $.parseJSON($("#storage").val());

另一种方法是使用data属性,可以使用$("#element").data()访问这些属性。

做一些很酷的改变:

storage["key1"] = "value3";

回到PHP:

$.post("url.php", storage, function(){
   alert("Alright, bro");
})