2011-12-08 29 views
0

基本上我遇到的问题是我有一段脚本被设置为在选择框“已分级”更改时执行。基本上,文档中发生的事情永远不会变得准备好。当我使用Chrome的控制台输出studentid和graderid值时,它们是空的。我把一个“退出();”函数在displayeval.php页面中,并能够发现文档永远不会准备好。文档永远不会准备好从数据库中获取信息

我意识到很多这样的代码已经搞乱了,而且很新手,但是我像一个疯狂的人一样,在课程结束之前完成了这个项目,我只想让它工作。

$(document).ready(function() { 
    $('#graded').change(function() { 
     var studentid = $('#studentid').val(); 
     var graderid = $(this).val(); 
     $.get("displayeval.php?graderid=" + graderid + "&studentid=" + studentid, function (data) { 
      $('#behavior-290').val(data.comment); 
     }, "json"); 
    }); 
}); 

instructoreval.php

<?php 
include('includes/header.php'); 
$student_id=$_GET['studentid']; 
if($session->userlevel>=8) 

//if they are an instructor 
{ 
if(isset($_POST['Submit'])){ 
     $query="SELECT * FROM Behavior b, Groups g WHERE g.GROUP_ID=" . $session->GROUP_ID . " AND b.CONTRACT_ID=g.CONTRACT_ID"; 
     $btwo = mysql_query($query) or die(mysql_error()); 
     $numB = mysql_num_rows($btwo); 
     $query2="INSERT INTO Eval (STUDENT_ID, Grader_ID, GROUP_ID, Grade) VALUES (" . $_POST[graded] . ", " . $session->STUDENT_ID . ", " . $session->GROUP_ID . ", '10')"; 
     mysql_query($query2) or die(mysql_error()); 

     $evalid = mysql_insert_id(); 
     for($i=0;$i<$numB;$i++){ 
     $r2 = mysql_fetch_array($btwo); 
     $query3="INSERT INTO EvalComment (CONTRACT_ID, BEHAVIOR_ID, Comment, EVAL_ID) VALUES (" . $r2[CONTRACT_ID] . ", " . $r2[BEHAVIOR_ID] . ", \"" . $_POST[$r2[BEHAVIOR_ID]] . "\", " . $evalid . ")"; 
     mysql_query($query3) or die(mysql_error()); 
     }; 
     $qfour = mysql_query("SELECT * FROM users WHERE GROUP_ID=" . $session->GROUP_ID . " AND STUDENT_ID=" . $_POST[graded]); 
     $rfour = mysql_fetch_array($qfour); 
     popup("Your comments for " . $rfour[lname] . ", " . $rfour[fname] . " have been submitted."); 
    }; 


      $link = mysql_connect("localhost","drallen1","unicode") or die(mysql_error); 
      mysql_select_db("drallen1"); 

      $qsix = mysql_query("SELECT * FROM users u WHERE u.GROUP_ID=" . $session->GROUP_ID . " AND NOT EXISTS(SELECT * FROM Eval e WHERE u.STUDENT_ID=e.STUDENT_ID) AND u.STUDENT_ID!=" . $session->STUDENT_ID); 
      $numE = mysql_num_rows($qsix); 
      /*************************************************** 
      //WHEN numE == 0 GO TO PIE CHART 
      ***************************************************/ 
      //QUERY 
      $qtwo = mysql_query("SELECT * FROM Behavior b, Groups g WHERE g.GROUP_ID=" . $session->GROUP_ID . " AND b.CONTRACT_ID=g.CONTRACT_ID"); 
      // match eval id 
      $numB = mysql_num_rows($qtwo); 

      if($numE>1) 
       $page="evalform.php"; 
      else 
       $page="evalprocess.php"; 

       echo "<form action=$page method=\"POST\">";?> 

      <script type="text/javascript"> 
       $(document).ready(function(){ 
          $('#graded').change(
           function() { 
           var studentid = $('#studentid').val(); 
           var graderid = $(this).val(); 

           $.get("displayeval.php?graderid=" + graderid + "&studentid=" + studentid, 
            function(data){ 
             $('#behavior-290').val(data.comment); 
            }, "json"); 
          }); 
        }); 
     </script> 
      <input type="hidden" name="studentid" id="studentid" value="<?php echo $_GET['studentid'];?>" /> 
      Student: <select name="graded" id="graded"> 
       <option selected="selected">Please Select a Student to Grade</option> 
       <?php for($i=0;$i<$numE;$i++){ 
       $rsix = mysql_fetch_array($qsix);?> 
       <option value="<?php echo $rsix[STUDENT_ID]?>"><?php echo $rsix[fname] . " " . $rsix[lname]?></option> 
       <?php };?> 
      </select></br></br> 

      <!--$qthree = mysql_query("SELECT EVAL_ID FROM Eval WHERE GRADER_ID=" . $student_id. " AND STUDENT_ID=" . graded.value); --> 

      <?php for($i=0;$i<$numB;$i++){ 
      //result of qtwo 
       $rtwo = mysql_fetch_array($qtwo); 
       echo "Behavior: <input name=\"BEHAVIOR_ID\" type=\"text\" value=\"" . $rtwo[BehaviorName] . "\" readonly=\"readonly\"/> </br>"; 

       //$queryshit="SELECT Comment FROM EvalComment WHERE EVAL_ID=RESULTFROMQTHREE AND BEHAVIOR_ID=" . $rtwo[BEHAVIOR_ID]; 
       //$comments; 

       echo "Comments: <textarea name=\"" . $rtwo['BEHAVIOR_ID'] . "\" id=\"behavior-" . $rtwo['BEHAVIOR_ID'] . "\" rows=\"5\" cols=\"50\">". $comments . "</textarea> </br>"; ?> 
      <?php };?> 
      </br> 
      <input type="submit" value="Send!" name="Submit"/> 
      </form> 
     </body> 

    </html> 

    <? include("includes/footer.php"); 
    }else{ 
    echo "You don't have access to this."; 
};?> 

displayeval.php

<?php 
include('include/session.php'); 


$grader_id=$_GET['graderid']; 
$student_id=$_GET['studentid']; 

$query="SELECT EVAL_ID FROM Eval WHERE GRADER_ID=". $grader_id . " AND STUDENT_ID=" . $student_id; 

$result=mysql_query($query) or die(mysql_error()); 
$data=mysql_fetch_array($result); 

$eval_id=$data['EVAL_ID']; 

$query="SELECT BEHAVIOR_ID,Comment comment FROM EvalComment WHERE EVAL_ID=". $eval_id; 
$result=mysql_query($query) or die(mysql_error()); 

$data2=mysql_fetch_assoc($result); 
//print_r($data2); 


// query database based on GET params 

// fetch result 
// $mysql_row = mysql_fetch_assoc() 

// display in JSON: 
echo json_encode($data2); 

这是displayeval(displayeval.php?graderid = 0 & studentid = 241654664)

页 的结果
{"BEHAVIOR_ID":"1","comment":"Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write Write"} 
+0

什么浏览器你在测试吗?在'var studentid'中放置一个断点,看看它是否过早调用。 –

+2

你是什么意思“文档永远不会准备好” - 你的意思是客户端JavaScript永远不会执行,或者服务器端代码没有完成运行,或者?如果问题出现在前端Javascript代码中,则您发布的PHP无关紧要,反之亦然。 – nrabinowitz

+1

你能显示html输出吗? – themerlinproject

回答

1

首先,确保$('#graded')元素存在,尝试:

$(document).ready(function() { 
    alert($('#graded').attr('id')); // should alert 'graded' 
}); 

其次,如果你是动态加载它(该页面已经被渲染后),您将需要通过$.bind()$.live()事件声明change()方法。

$('#graded').live('change', function() { 
    ... 
}); 

最后,请注意$.change()

对于复选框,您可能要做到这一点:

$('#graded').change(function(){ 
    if ($(this).is(':checked')) { 
     // the checkbox is now checked, do something 
    } else { 
     // the checkbox is now UN-checked, do something else 
    } 
}); 

除了所有(KISS原则),确保实际上是在加载jQuery库:

if (jQuery) { 
    alert('jQuery is loaded'); 
} 
+0

我试过使用$('#graded')。live('change',function(){ ... });但那不起作用。我使用了警报,它确实有效。我将警报放入更改功能中,当我更改选择框时它也会发出警报。它必须有一些与我得到的网址GETTING –

+1

我已经设置了感谢,结束了它的工作。问题在于变量 –