Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy to naprawdę długa ankieta?

Odpytywanie jest nieco trudniejsze niż zwykła chwila:tylko dlatego, że generalnie wszystko, co wysyłasz do przeglądarki, zostanie zinterpretowane po zakończeniu. Twój przykład jest całkiem jasny:

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

jQuery poczeka, aż odpowiedź zostanie zakończona, aby zbudować Twoje data zmienną, a następnie wywoła wywołanie zwrotne Twojego sukcesu.

Jednym ze sposobów tworzenia długich ankiet jest posiadanie zadania i obserwatora :

  • zadanie jest „nieskończoną” pętlą, nie wyświetla niczego poza przechwytywaniem i wyzwalaniem zdarzeń, umieszczanych w „pudełku”.

  • obserwujący jest wywołaniem ajax wykonywanym co X sekund, zagląda do "pudełka" wypełnionego przez zadanie i natychmiast działa wewnątrz strony.

Oto przykład długiej ankiety, nie ma obserwatora, tylko wydarzenie (wydanie), które zatrzymuje ankietę, ale zrozumiesz:

<?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>

Demonstracja:tutaj .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekazać zmienną do klauzuli IN?

  2. Jak przechowywać ciąg JSON w bazie danych MySQL?

  3. Zwróć wartość logiczną z pliku PHP do pliku AJAX - przycisk Śledź

  4. Jak wygenerować DDL dla wszystkich tabel w bazie danych w MySQL?

  5. Wybór MySQL według najnowszego znacznika czasu