<?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>Dan Polant :: Web Interaction Designer &#187; ajax</title>
	<atom:link href="http://danpolant.com/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://danpolant.com</link>
	<description></description>
	<lastBuildDate>Tue, 01 Nov 2011 03:55:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>How to: Get Ajax working in Buddypress</title>
		<link>http://danpolant.com/how-to-get-ajax-working-in-buddypress/</link>
		<comments>http://danpolant.com/how-to-get-ajax-working-in-buddypress/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 06:17:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[buddypress]]></category>

		<guid isPermaLink="false">http://danpolant.com/?p=169</guid>
		<description><![CDATA[Ajax can really streamline a site&#8217;s user experience. The WordPress/WPMU back-end owes much of its ease of use to the presence of many dynamic menus and feedback notices. No one has had time to implement much of this for Buddypress, but I&#8217;m going to show you how to put use Ajax in your Buddypress plugins.
Its [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax can really streamline a site&#8217;s user experience. The WordPress/WPMU back-end owes much of its ease of use to the presence of many dynamic menus and feedback notices. No one has had time to implement much of this for Buddypress, but I&#8217;m going to show you how to put use Ajax in your Buddypress plugins.</p>
<p>Its not too hard, but a big barrier to getting it to work is keeping all of the connections straight. When you have something of this nature wrong it is hard to debug. </p>
<p>Lets make a button that loads a hello world via ajax. Start with whatever input fields you need, and put a <code>wp_nonce_field()</code> underneath. Its a good idea to put all of this inside a form with an action, because you want people to be able to use your plugin even if they can&#8217;t run Javascript for some silly reason!</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;form action=<span class="st0">&quot;somewhere.com/yeah&quot;</span> id=<span class="st0">&quot;my-form&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;label <span class="kw1">for</span>=<span class="st0">&quot;username&quot;</span>&gt;Name: &lt;/label&gt;&lt;input type=<span class="st0">&quot;text&quot;</span> name=<span class="st0">&quot;name&quot;</span>&gt;&lt;/input&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;label <span class="kw1">for</span>=<span class="st0">&quot;email&quot;</span>&gt;Email: &lt;/label&gt;&lt;input type=<span class="st0">&quot;text&quot;</span> name=<span class="st0">&quot;email&quot;</span>&gt;&lt;/input&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">&lt;?php</span> wp_nonce_field<span class="br0">&#40;</span> <span class="st0">&#8216;save&#8217;</span>, <span class="st0">&#8216;_wpnonce-save&#8217;</span> <span class="br0">&#41;</span>; <span class="kw2">?&gt;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;input type=<span class="st0">&quot;submit&quot;</span> name=<span class="st0">&quot;save&quot;</span> id=<span class="st0">&quot;save&quot;</span> value = <span class="st0">&quot;Add this member&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;span <span class="kw2">class</span>=<span class="st0">&quot;ajax-loader&quot;</span>&gt;&lt;/span&gt; <span class="co1">//for fun, buddypress knows what this is</span></div>
</li>
<li class="li1">
<div class="de1">&lt;/form&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">Enqueue</a> a javacript file that has something like this:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">jQuery<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;#my-form input#save&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;.ajax-loader&#8217;</span><span class="br0">&#41;</span>.<span class="me1">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//don&#8217;t let them click it a bunch of times in a row</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;#save&#8217;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="st0">&#8216;disabled&#8217;</span>: <span class="kw2">true</span><span class="br0">&#125;</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery.<span class="me1">post</span><span class="br0">&#40;</span> ajaxurl, <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action: <span class="st0">&#8216;my_save&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;cookie&#8217;</span>: encodeURIComponent<span class="br0">&#40;</span>document.<span class="me1">cookie</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;_wpnonce&#8217;</span>: jQuery<span class="br0">&#40;</span><span class="st0">&quot;input#_wpnonce-save&quot;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;username&#8217;</span>: jQuery<span class="br0">&#40;</span><span class="st0">&quot;input[name='username']&quot;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span>: jQuery<span class="br0">&#40;</span><span class="st0">&quot;input[name='name']&quot;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;.ajax-loader&#8217;</span><span class="br0">&#41;</span>.<span class="me1">toggle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;#save&#8217;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="st0">&#8216;disabled&#8217;</span>: <span class="kw2">false</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">&#8216;#my-form&#8217;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>We&#8217;re doing jQuery here. Basically this hi-jacks the submit button and causes javascript to run instead of the usual post to the action page. Read up on <a href="http://jquery.com">jQuery</a> if this code doesn&#8217;t make any sense.</p>
<p>But let me explain a few things about the <code>jQuery.post()</code>. <code>action</code>, <code>_wpnonce</code> and <code>cookie</code> are <code>$_REQUEST</code> variables that Buddypress understands &#8211; you must name these properties exactly as you see here. Additionally, their values must correspond to other values set in different places of the Ajax process. I&#8217;m going to communicate these necessary equalities in a series of rules. The first one is:</p>
<h4 style="font-style:normal;">_wpnonce&#8221; in the javascript file = id of your nonce_field (the second parameter of wp_nonce_field)</h4>
<p>Now its time to write our target php function. </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> my_save_function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; check_ajax_referer<span class="br0">&#40;</span><span class="st0">&#8216;save&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Sorry, I didn&#8217;t save anything&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&#8216;wp_ajax_my_save&#8217;</span>, <span class="st0">&#8216;my_save_function&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Here&#8217;s the second rule:</p>
<h4 style="font-style:normal;">Bind your target function to an action named after the &#8220;action&#8221; property in your Ajax Javascript, and remember to add &#8220;wp_ajax_&#8221; to the beginning</h4>
<p>. . . And the third:</p>
<h4 style="font-style:normal;">Use the first argument (the action) of your wp_nonce_field() on the Ajax initiating template/screen function as the argument for check_admin_referer()</h4>
<p><code>check_ajax_referer</code> is a security thing &#8211; you need to do this. At the end of all of this, the message should appear dynamically at the end of your form when you press the button. Keeping the equalities straight is key.</p>
]]></content:encoded>
			<wfw:commentRss>http://danpolant.com/how-to-get-ajax-working-in-buddypress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

