如何使用AJAX / jQuery显示打印内容?

3

我正在尝试理解整个 AJAX/jQuery 技术。目前,当我单独运行这个 PHP 脚本时,必须等待并观察旋转的圆圈,直到循环完成并加载完毕。

while ( $row = mysql_fetch_array($res) ) {
    postcode_to_storm( $row['Test'] );

    $dom = new DOMDocument();
    @$dom->loadHTML($result);
    $xPath = new DOMXPath($dom);

    $failInvite = 'Rejected';
    $findFalse = strpos($result, $failInvite);

    if ( $findFalse == true ) {
        $array[$i] = $row['Test'];
        $i++;
        echo $array[$i]};
    } 

}

现在,我该如何使用AJAX/jQuery来每次调用echo $array[$i]};时立即显示它,而不是等待整个过程完成?
3个回答

3
AJAX的工作方式是,在第一次请求时,你编写网页的基本HTML,包括一些调用服务器并请求更多数据的javascript。根据你计划发送数据的方式,页面呈现后可能会进行一个或多个请求以获取更多数据。使用AJAX需要重新考虑如何传递数据。例如,你需要一个“脚本”来加载页面,然后另一个“脚本”来获取数据——当然,它们可以是相同的,只是参数不同。我将添加一个简单的示例来演示,因为重构你的示例需要更多了解你的数据及其传递方式。这个例子来自于w3schools.com
<script type="text/javascript">
   $(function() {
       $('#users').change(function() {
          // here's the AJAX bit 
          $.get( '/users/load.php?q=' + $(this).val(),
               function(html) {
                  $('#txtHint').html(html);
          });
       });
   });
</script>
</head>
<body>

<form>
<select name="users">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>

PHP

<?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("ajax_demo", $con);

$sql="SELECT * FROM user WHERE id = '" . mysql_real_escape_string( $q ) . "'";

$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "<td>" . $row['Age'] . "</td>";
  echo "<td>" . $row['Hometown'] . "</td>";
  echo "<td>" . $row['Job'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

1

这与COMET相似。看看这里的区别:http://ajaxian.com/archives/comet-a-new-approach-to-ajax-applications

这篇文章讨论了PHP在特定的LAMP堆栈下的困难:http://www.phpclasses.org/blog/post/58-Responsive-AJAX-applications-with-COMET.html - 由于它是2006年发布的,可能有点过时,但你明白我的意思。

通常当你谈论传统的“ajax”时,你是在谈论客户端发起请求获取一些有限信息(http请求完成),而不需要显式地重新加载页面。


0

所以,你想让服务器在每个数据片段产生时单独发送它们?恐怕,在http请求中没有这样的功能。你必须关闭请求,然后响应才能发送到浏览器。

你可以考虑使用某种分页策略,发送多个请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接