我如何在jQuery中引用php变量?

时间:2012-03-03 00:20:14

标签: php jquery dialog window

我是jQuery的初学者,我在这里有一些脚本,我想把jQuery与PHP混合。我有课程,那些课程是课程。教师被指派教授课程。我想要的是一个链接,如果我按它弹出一个弹出窗口,其中显示课程详细信息或课程详细信息。我的问题是我将在一个页面中有多个链接,因此对话框/模态窗口,以便$ l ['id']和$ c ['id']将是不同的。因此,如果jQuery脚本在视图文件中并且我在控制器中创建实际内容本身并将其传递给jQuery,我怎么能在jQuery中使用$ l ['id']和$ c ['id']视图。对不起,如果我没有意义,因为我自己仍然对这一切感到困惑。

view.php
<script type="text/javascript">
$(function(){
        // setup ul.tabs to work as tabs for each div directly under div.panes
        $("#tabs").tabs();   
        $('#dialog').dialog({   
                             modal: true
                            });          
})
</script>
<h1>Student Hub: Courses for <?php echo $studentName;?></h1>

<div id="tabs">
    <?php echo $content;?>
</div>



controller.php  
This is in a foreach loop
<div class="lessonDetails">
    <p><a href="#lessonInfo'.$l['id'].'">Lesson Details:</a><p>
    <div id="lessonDialog'.$l['id'].'" title="Lesson Details">
    '.$l['name'].'
    </div>
</div>  

<div class="courseDetails">
    <p><a href="#courseInfo'.$c['id'].'">Course Timetable & Resources</a><p>
    <div id="courseDialog'.$c['id'].'" title="Course Details">
    <p>'.$c['fullname'].'</p>
    <p>'.$c['summary'].'</p>
    <p>Upcoming Lessons: </p>
</div>                                                                  

5 个答案:

答案 0 :(得分:2)

技术答案是你不是因为一个是服务器端语言而一个是客户端语言;你不能通过JavaScript(jQuery)访问PHP变量。但是,您可以在生成时将PHP变量放入HTML页面,然后使用JavaScript或jQuery进行选择。

阅读你的情景,我认为你过于复杂的事情。想想你的应用;不要考虑技术方面,而应该考虑应该如何布局。我猜你有一个学生控制器,一个课程控制器和一个课程控制器。这些控制器将具有名为view或类似的操作,然后这些操作将使用ID来显示特定的学生/课程/课程。

在您的HTML页面/视图/模板中,您应该只拥有vanilla网址。然后应该使用JavaScript来增强网站。因此,在您的情况下,我会将其标记为类似如下:

<ul class="courses">
<?php foreach ($courses as $course): ?>
  <li><a href="/courses/view/<?php echo $course->id; ?>"><?php echo $course->title; ?></a></li>
<?php endforeach; ?>
</ul>

然后,在外部JavaScript文件中,我有一个函数可以侦听<a>标记上的点击,而不是导航到该URL,而是以弹出/模式显示页面内容窗口。

<script>
    $('.courses a').click(function(e) {
        e.preventDefault();
        // load external page and display it in a modal
    });
</script>

这样,如果由于某种原因JavaScript无法使用,那么用户将被带到课程详情页面。如果他们确实有JavaScript,那么他们会得到一个奇特的模态弹出窗口。

希望这会有所帮助。如果你需要清理任何东西,请告诉我,正如我在几个JD和Cokes之后的早些时候写的那样!

答案 1 :(得分:0)

你可以在每个链接中创建一些额外的属性,并使用jQuery使用attr函数$('a')。attr('courses')检索信息。

喜欢

<a href="#" class=".information" teacher="idTeacher" course="idCourse" >list </a>

然后使用jquery

$('.information').click(function(){
teacher= $(this).attr('teacher');
course=$(this).attr('course');



});

记得使用$('。information')。live()如果你使用一些AJAX从服务器获取数据并解析它来创建链接

答案 2 :(得分:0)

也许您可以创建包含隐藏值的表单。

<?php foreach($lesson as $l): ?>
  <form method="POST" action="">
    <input type="hidden" name="lesson_id" value="<?php echo $l['id']; ?>" />  
    <a href="#" class="model_window">Click</a>
  </form>
<?php endforeach; ?>

的javascript:

$(document).ready(function() {
  $('.modal_window').click(function() {
    var form = $(this).closest('form');
    var lesson_id = $(form).find('input[name=lesson_id]').val();

    // Do something with lesson_id
  });
});

课程的想法是一样的。

** * ** * 修改 * ** * ****

也许您可以尝试使用输入数组。假设你有这样的东西

<input type="hidden" name="courses[]" value="1" />  
<input type="hidden" name="courses[]" value="2" />  

的javascript:

var courses = $(form).find('input[name^=courses]');
$(courses).each(function() {
  var course = $(this).val();
});

答案 3 :(得分:0)

您可以在JavaScript代码中放置代码。由于该代码是服务器端,因此它将“呈现”到您的JavaScript客户端代码。因此,您的JavaScript可以访问PHP脚本存储的值。

答案 4 :(得分:0)

这是使用jQueryUI对话框的解决方案。没有ID是必需的,但是如果需要它们将它们作为数据属性添加到该链接

<p><a href="#courseInfo'.$c['id'].'" data-id="'.$c['id'].'" >Course Timetable & Resources</a><p>

这允许使用jQuery data()方法轻松获取ID。

每次使用都会创建并销毁对话框。正如评论中所述,不知道对话框中的内容是什么。如果是来自href的ajax,我可以轻松调整

$('.lessonDetails a, .courseDetails a').click(function(){
    var $this=$(this);
    /* if need the id associated to link*/
    var id=$this.data('id');    

    var content= ''/* ???????   */  

    var title=$this.parent().next().attr('title')
    loadDialog(title, content);
    return false; /* stop browser following href*/

})


function loadDialog(title, content) {

    var dialogOpts = {
        modal: true,
        title: title,
        width: 800,
        close: function() {
            /* remove this dialog from DOM on close*/
            $(this).remove()
        }
    };
    $('<div>').append(content).dialog(dialogOpts);  

}