Các ý kiến từ this question khiến tôi suy nghĩ về điều gì đó. Khi nào thì chính xác chức năng cháy $(document).ready()
? Câu trả lời rõ ràng sẽ là "khi tài liệu đã sẵn sàng", nhưng chính xác thì khi nào?
Ví dụ: if I turned output buffering on and flushed my output while PHP continued executing, điều đó sẽ không gửi đầu ra tới trình duyệt không? Vì vậy, có cách nào tài liệu có thể sẵn sàng trước khi tập lệnh PHP đã hoàn thành thực thi hay không, sự kiện có chờ cho đến khi yêu cầu kết thúc không?
EDIT:
Các câu trả lời dường như về cơ bản đồng ý rằng sự kiện cháy khi khách hàng nghĩ rằng nó đã sẵn sàng.
Để có được một sự hiểu biết tốt hơn (mà tôi nên có lẽ thực hiện ở nơi đầu tiên), tôi chỉ cần thiết lập một thử nghiệm:
<?php ob_start(); ?>
<html>
<head>
<script type="text/javascript" src="lib/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
alert("READY");
});
</script>
</head>
<body>
<?php
ob_flush();
for ($i=0; $i<999999; $i++) {
echo "HELLO$i\n";
ob_flush();
}
?>
</body>
</html>
Kết quả được rằng trong ví dụ này, các nội dung bắt đầu hiển thị trên ngay lập tức, nhưng cảnh báo đã không xảy ra cho đến khi vòng lặp hoàn thành hoặc tập lệnh hết thời gian chờ (30 giây).
Để điểm tùy thuộc vào trình duyệt bạn sử dụng, tôi đã cố gắng chèn này trong vòng lặp của tôi:
if ($i == 99) {
echo "</body></html>";
}
Và Chrome dường như tự động sửa chữa nó bằng cách đặt những thẻ vào cuối trang (như đã thấy trong thanh tra web dev). Xem nguồn của trang cho thấy nó ở giữa, nơi tôi echo'ed nó mặc dù.
ready() luôn sau khi php được thực hiện in trang html. nói cách khác, luôn luôn sau "