使用php进行输出缓冲,使用jQuery发送ob_get_contents

时间:2011-08-18 16:33:57

标签: php javascript jquery html output-buffering

我正在尝试使用输出缓冲来捕获我的php页面的内容:

<?php

function connect() {
  $dbh = mysql_connect ("localhost", "user", "password") or die ('I cannot connect to the database because: ' . mysql_error());
  mysql_select_db("PDS", $dbh); 
  return $dbh;
}

session_start();

if(isset($_SESSION['username'])){
  if(isset($_POST['entryId'])){
    //do something
    $dbh = connect();
    $ide = $_POST['entryId'];
    $usertab = $_POST['usertable'];
    $answertable = $usertab . "Answers";
    $entrytable = $usertab . "Entries";
    $query = mysql_query("SELECT e.date, q.questionNumber, q.question, q.sectionId, a.answer FROM $answertable a, Questions q, $entrytable e WHERE a.entryId = '$ide' AND a.questionId = q.questionId AND e.entryId = '$ide' ORDER BY q.questionNumber ASC;") or die("Error: " . mysql_error());

    if($query){
      //set variables      
      $sectionOne = array();      
      while($row=mysql_fetch_assoc($query)){
    $date = $row['date'];
    $sectionOne[] = $row;   
      }
    }else{
      //error - sql failed
    }
  } 
?>

<?php
  ob_start();
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <script src = "jQuery.js"></script>
   <script>
   $(document).ready(function(){
       $("#export").click(function(e){
       //post to html2pdfconverter.php
       $("#link").val("<?php echo(ob_get_contents()); ?>"); //THIS DOESN'T WORK
       $("#nm").val("Entry Report.pdf");       
       $("form#sendanswers").submit();
       }); 
   });
  </script>
  <title>Personal Diary System - Entry Report - <?php echo($date); ?></title>
  </head>
  <body>
  <h1>Entry Report - <?php echo($date); ?></h1>    
  <div id = "buttons">
  <form id = "sendanswers" name = "sendanswers" action="html2pdfconverter.php" method="post">
  <input type = "hidden" name = "link" id = "link" value = "">
  <input type = "hidden" name = "nm" id = "nm" value = "">
  <input type = "button" name = "export" id = "export" value = "Export As PDF"/>
  </form>                        
  </div>                         
  <h3>Biological Information</h3>
  <?php
     echo('<p>');                         
      $i = 0;                         
      foreach($sectionOne as &$value){
    if($i == 1 || $i == 3){
      $image = "assets/urine".$i.".png";
      echo("<br/>");
      echo($value['question']." <br/> "."<img src = \"$image\"/>");
      echo("<br/>");
    }else{
      echo($value['question'].' : '.$value['answer']);
    }
    echo("<br/>");
    $i++;
      }
     echo('</p>');      
  ?>
  </body>
</html>
<?php   
}
$contents = ob_get_contents(); //THIS WORKS    
ob_end();
?>

我使用ob$contents的内容分配给ob_get_contents();这样可行,并且回显$内容会复制html页面。

但是,在我的jQuery中,我试图使用以下命令将其分配给隐藏文本字段('link'):

$("#link").val("<?php echo($contents); ?>");

然而,这不起作用。我有一种感觉,因为我访问内容太过时尚但不太确定......任何想法?

2 个答案:

答案 0 :(得分:1)

   $("#link").val("<?php echo(ob_get_contents()); ?>"); //THIS DOESN'T WORK

当你执行ob_get_contents调用时,你只输出大约10行的javascript和html。 PHP将 NOT 及时回到过去并且神奇地填写你执行此ob_get_contents()的文档的其余部分。

当页面开始出现时,您基本上是从激光打印机中翻页,而打印机仍在打印页面的下半部分。

我无法理解为什么要将页面内容嵌入到输入字段中。如果你想以某种方式在输入字段中缓存页面的内容,你可以使用JS来获取$('body')的.innerHTML。

答案 1 :(得分:0)

嗯,你有两个问题。

首先是你怀疑的。直到以后你才能访问这些东西。您可能没有意识到的第二个问题是,即使您设法找到重新排序并使其工作的方法,您也会在JavaScript中引用问题。这是递归的,但是很糟糕。

您应该做的是改变您的$('#export').click处理程序以执行Ajax调用,在单独的PHP脚本中呈现您需要出现在服务器上的链接中的HTML(无需输出缓冲)然后具有你的代码将你调用的结果注入页面,就像你现在在点击处理程序中尝试的那样。