2009-09-28 6 views
1

J'utilise le code PHP ci-dessous pour obtenir des résultats pour revenir à un autosuggest/autocomplete. Le problème est que si une requête SQL antérieure prend plus de temps à retourner de la base de données que la requête SQL la plus récente, alors les résultats de l'ancienne requête seront affichés dans la boîte de résultats autosuggest. Donc, si vous commencez à chercher Thomas, il peut afficher les résultats pour Tho si cette requête SQL prend plus de temps. Je me demandais s'il existe un moyen d'annuler les requêtes précédentes une fois qu'une nouvelle est implémentée, ou pour s'assurer que la requête la plus récente est utilisée?Assurez-vous que le résultat de la requête SQL le plus récent est utilisé dans autosuggest

<?php 
// begin XML output 
$xmlStr = <<<XML 
<?xml version='1.0' standalone='yes'?> 
<authors> 
XML; 

// open database connection 
$mysqli = new mysqli("localhost", "user", "pass", "library");  
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s 
", mysqli_connect_error()); 
    exit(); 
} 

// retrieve author list matching input 
// add to XML document 
$q = $mysqli->real_escape_string($_GET['query']); 
$sql = "SELECT AuthorName FROM author WHERE AuthorName LIKE '" . $q . "%' ORDER by AuthorName"; 
if ($result = $mysqli->query($sql)) { 
    while ($row = $result->fetch_row()) { 
    $xmlStr .= '<author name="' . $row[0] . '"></author>'; 
    } 
    $result->close(); 
} 

// clean up 
// output XML document 
$mysqli->close(); 
$xmlStr .= '</authors>'; 
header("Content-Type: text/xml"); 
echo $xmlStr; 
?> 
+0

Si cela est lié à l'Ajax, vous pouvez ajouter le 'ajax' tag. –

Répondre

0

Vous pouvez synchroniser les appels AJAX. Comme si vous aviez quelques secondes de retard après l'événement clé, puis faites l'appel AJAX. Réglage asynchronous = true peut également aider.

0

vous pouvez annuler l'appel ajax en appelant la méthode abort: XmlHttpRequest.abort() avant de faire la nouvelle demande