Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đây có phải là một cuộc thăm dò dài đúng không?

Việc thăm dò ý kiến ​​khó hơn một chút so với đơn giản:chỉ vì nói chung, tất cả những thứ bạn xuất ra trình duyệt sẽ được diễn giải khi hoàn tất. Ví dụ của bạn khá rõ ràng:

success:function(data) {
    var json = data;
    $("#commidwin").append(json['msg']);
    last_msg_id = json["last_msg_id_db"];
    setTimeout("load_msgs()", 1000);
},

jQuery sẽ đợi cho đến khi phản hồi hoàn tất để xây dựng data của bạn và sau đó sẽ gọi lại thành công của bạn.

Một cách để tạo ra cuộc thăm dò ý kiến ​​dài là có một nhiệm vụ và một người theo dõi:

  • nhiệm vụ là vòng lặp "vô hạn", nó không hiển thị gì ngoài việc bắt và kích hoạt các sự kiện, đặt trong một "hộp".

  • follower là một lệnh gọi ajax được thực hiện sau mỗi X giây, nó nhìn vào bên trong "hộp" được điền bởi nhiệm vụ và ngay lập tức hành động bên trong trang.

Đây là một ví dụ về bỏ phiếu dài, không có người theo dõi, chỉ là một sự kiện (phát hành) dừng cuộc thăm dò, nhưng bạn sẽ hiểu:

<?php

// For this demo
if (file_exists('poll.txt') == false)
{
    file_put_contents('poll.txt', '');
}

// If this variable is set, a long-polling is starting...    
if (isset($_GET['poll']))
{

    // Don't forget to change the default time limit
    set_time_limit(120);

    date_default_timezone_set('Europe/Paris');
    $time = time();

    // We loop until you click on the "release" button...
    $poll = true;
    $number_of_tries = 1;
    while ($poll)
    {
        // Here we simulate a request (last mtime of file could be a creation/update_date field on a base)
        clearstatcache();
        $mtime = filemtime('poll.txt');

        if ($mtime > $time)
        {
            $result = htmlentities(file_get_contents('poll.txt'));
            $poll = false;
        }

        // Of course, else your polling will kill your resources!
        $number_of_tries++;
        sleep(1);
    }

    // Outputs result
    echo "Number of tries : {$number_of_tries}<br/>{$result}";
    die();
}

// Here we catch the release form
if (isset($_GET['release']))
{
    $data = '';
    if (isset($_GET['data']))
    {
        $data = $_GET['data'];
    }
    file_put_contents('poll.txt', $data);
    die();
}
?>

<!-- click this button to begin long-polling -->
<input id="poll" type="button" value="Click me to start polling" />

<br/><br/>

Give me some text here :
<br/>
<input id="data" type="text" />
<br/>

<!-- click this button to release long-polling -->
<input id="release" type="button" value="Click me to release polling" disabled="disabled" />

<br/><br/>

Result after releasing polling :
<div id="result"></div>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">

    // Script to launch polling
    $('#poll').click(function() {
        $('#poll').attr('disabled', 'disabled');
        $('#release').removeAttr('disabled');
        $.ajax({
            url: 'poll.php',
            data: {
                poll: 'yes' // sets our $_GET['poll']
            },
            success: function(data) {
                $('#result').html(data);
                $('#poll').removeAttr('disabled');
                $('#release').attr('disabled', 'disabled');
            }
        });
    });

    // Script to release polling
    $('#release').click(function() {
        $.ajax({
            url: 'poll.php',
            data: {
                release: 'yes', // sets our $_GET['release']
                data: $('#data').val() // sets our $_GET['data']
            }
        });
    });

</script>

Trình diễn: tại đây .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqlalchemy, truy vấn thô và các tham số

  2. CONCAT cột với Laravel 5 hùng hồn

  3. Trả về giá trị mặc định nếu không tìm thấy hàng đơn

  4. cách khắc phục LỖI 1045 (28000):Quyền truy cập bị từ chối đối với người dùng 'ODBC' @ 'localhost' (sử dụng mật khẩu:NO) vĩnh viễn

  5. Chỉ nhận các bản ghi được tạo ngày hôm nay trong laravel