<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Anthor.Net &#187; Ajax</title>
	<atom:link href="http://www.anthor.net/blog/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anthor.net</link>
	<description></description>
	<lastBuildDate>Mon, 05 Dec 2011 16:29:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Ajax Queue avec jQuery</title>
		<link>http://www.anthor.net/blog/developpement/ajax-queue-avec-jquery/</link>
		<comments>http://www.anthor.net/blog/developpement/ajax-queue-avec-jquery/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 09:19:54 +0000</pubDate>
		<dc:creator>Anthor</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.anthor.net/?p=526</guid>
		<description><![CDATA[En travaillant sur un nouvel outil ce week-end, je me suis rendu compte que l&#8217;utilisation des queues en Ajax avec jQuery n&#8217;était pas natif. Il existe quelques pistes à ces adresses, mais rien de vraiment pratique : http://jquery.com/plugins/project/ajaxqueue http://docs.jquery.com/AjaxQueue Puis j&#8217;ai trouvé une version plus intéressante de celui-ci dans le plugin [jQuery Autocomplete&#124;http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/&#124;en], néanmoins, même [...]]]></description>
			<content:encoded><![CDATA[<p>En travaillant sur un nouvel outil ce week-end, je me suis rendu compte que l&#8217;utilisation des queues en Ajax avec jQuery n&#8217;était pas natif.<br />
Il existe quelques pistes à ces adresses, mais rien de vraiment pratique :</p>
<ul>
<li><a href="http://jquery.com/plugins/project/ajaxqueue" target="_blank">http://jquery.com/plugins/project/ajaxqueue</a></li>
<li><a href="http://docs.jquery.com/AjaxQueue" target="_blank">http://docs.jquery.com/AjaxQueue</a></li>
</ul>
<p>Puis j&#8217;ai trouvé une version plus intéressante de celui-ci dans le plugin [jQuery Autocomplete|http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/|en], néanmoins, même si la fonction ABORT fonctionne correctement, mes appels en queue ne fonctionnaient pas.<br />
J&#8217;en ai donc légèrement modifié les sources, en ajoutant un mode DEQUEUE me permettant de lancer la liste d&#8217;attente en fin de boucle par exemple.</p>
<p>Grâce à l&#8217;utilisation de la variable PORT, on peux ainsi contrôler indépendamment plusieurs queues, ou annuler des requêtes spécifiques, le tout en utilisant la fonction Ajax de jQuery.</p>
<p><span id="more-526"></span></p>
<h4>Le plugin</h4>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/**
 * Ajax Queue Plugin
 */</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> ajax <span style="color: #339933;">=</span> $.<span style="color: #660066;">ajax</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> pendingRequests <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    $.<span style="color: #660066;">ajax</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>settings<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        settings <span style="color: #339933;">=</span> jQuery.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>
            settings<span style="color: #339933;">,</span> 
            jQuery.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>
                <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
                jQuery.<span style="color: #660066;">ajaxSettings</span><span style="color: #339933;">,</span> 
                settings
            <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
        <span style="color: #003366; font-weight: bold;">var</span> port <span style="color: #339933;">=</span> settings.<span style="color: #660066;">port</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>settings.<span style="color: #660066;">mode</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;abort&quot;</span><span style="color: #339933;">:</span> 
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> pendingRequests<span style="color: #009900;">&#91;</span>port<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    pendingRequests<span style="color: #009900;">&#91;</span>port<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">abort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">return</span> pendingRequests<span style="color: #009900;">&#91;</span>port<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> ajax.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;queue&quot;</span><span style="color: #339933;">:</span> 
                <span style="color: #003366; font-weight: bold;">var</span> _old <span style="color: #339933;">=</span> settings.<span style="color: #660066;">complete</span><span style="color: #339933;">;</span>
                settings.<span style="color: #660066;">complete</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> _old <span style="color: #009900;">&#41;</span>
                        _old.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    jQuery<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>ajax<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">dequeue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajax&quot;</span> <span style="color: #339933;">+</span> port <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
                jQuery<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span> ajax <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">queue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajax&quot;</span> <span style="color: #339933;">+</span> port<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    ajax<span style="color: #009900;">&#40;</span> settings <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;dequeue&quot;</span><span style="color: #339933;">:</span> 
                jQuery<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>ajax<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">dequeue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajax&quot;</span> <span style="color: #339933;">+</span> port <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>jQuery.<span style="color: #660066;">isFunction</span><span style="color: #009900;">&#40;</span>settings.<span style="color: #660066;">complete</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    settings.<span style="color: #660066;">complete</span><span style="color: #009900;">&#40;</span>settings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">return</span> ajax.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h4>Utilisation de la méthode ABORT</h4>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$input.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'keyup'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$searchTimeout <span style="color: #339933;">!=</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        clearTimeout<span style="color: #009900;">&#40;</span>$searchTimeout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    $searchTimeout <span style="color: #339933;">=</span> setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $searchTimeout <span style="color: #339933;">=</span> undefined<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> inputVal <span style="color: #339933;">=</span> $input.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^\s+/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s+$/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        $.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            mode    <span style="color: #339933;">:</span> <span style="color: #3366CC;">'abort'</span><span style="color: #339933;">,</span>
            port    <span style="color: #339933;">:</span> <span style="color: #3366CC;">'ajaxSuggestions'</span><span style="color: #339933;">,</span>
            type    <span style="color: #339933;">:</span> <span style="color: #3366CC;">'POST'</span><span style="color: #339933;">,</span>
            url     <span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span><span style="color: #339933;">,</span>
            data    <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">'keywords'</span><span style="color: #339933;">:</span> inputVal <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            success <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Cette méthode est plus qu&#8217;intéressante dans le cas par exemple ou l&#8217;on souhaite afficher des informations au fur et à mesure que l&#8217;utilisateur écrit une information. Les requêtes précédentes utilisant le même port sont annulées au profit de la nouvelle requête, évitant un engorgement des informations et des erreurs dans le cas ou une requête ultérieure soit plus rapide que les précédentes.</p>
<h4>Utilisation de la méthode QUEUE</h4>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">10</span> <span style="color: #339933;">;</span> i<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        mode<span style="color: #339933;">:</span> <span style="color: #3366CC;">'queue'</span><span style="color: #339933;">,</span>
        port<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ajaxWhois'</span><span style="color: #339933;">,</span>
        type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'POST'</span><span style="color: #339933;">,</span>
        url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span><span style="color: #339933;">,</span>
        data<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">'increment'</span><span style="color: #339933;">:</span> i <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
$.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> mode<span style="color: #339933;">:</span> <span style="color: #3366CC;">'dequeue'</span><span style="color: #339933;">,</span> port<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ajaxWhois'</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>La méthode queue permet de boucler facilement sur plusieurs requêtes et ne les lancer qu&#8217;au moment choisit. Les requêtes ainsi lancées, le sont les unes à la suite des autres, évitant un engorgement des données reçues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anthor.net/blog/developpement/ajax-queue-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

