Crawl and extract data from websites that employ AJAX, complex pagination or infinite scroll using the same tools you already use for your front-end development.
JavaScript Promises: A Tutorial with Examples
Promises, when used correctly, produce easy-to-read code that is easier to reason about, and thus easier to debug than callbacks. There is no need to set up conventions regarding, for example, error handling since they are already part of the specification.
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">dieToss</span><span class="hljs-params">()</span> {</span> <span class="hljs-keyword">return</span> <span class="hljs-transposed_variable">Math.</span><span class="hljs-built_in">floor</span>(<span class="hljs-transposed_variable">Math.</span>random() * <span class="hljs-number">6</span>) + <span class="hljs-number">1</span>; } <span class="hljs-transposed_variable">console.</span><span class="hljs-built_in">log</span>(<span class="hljs-string">'1'</span>); var promise = new <span class="hljs-transposed_variable">RSVP.</span>Promise(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(fulfill, reject)</span> {</span> var n = dieToss(); <span class="hljs-keyword">if</span> (n === <span class="hljs-number">6</span>) <span class="hljs-cell">{ fulfill(n); }</span> <span class="hljs-keyword">else</span> <span class="hljs-cell">{ reject(n); }</span> <span class="hljs-transposed_variable">console.</span><span class="hljs-built_in">log</span>(<span class="hljs-string">'2'</span>); }); <span class="hljs-transposed_variable">promise.</span>then(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(toss)</span> {</span> <span class="hljs-transposed_variable">console.</span><span class="hljs-built_in">log</span>(<span class="hljs-string">'Yay, threw a '</span> + toss + <span class="hljs-string">'.'</span>); }, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(toss)</span> {</span> <span class="hljs-transposed_variable">console.</span><span class="hljs-built_in">log</span>(<span class="hljs-string">'Oh, noes, threw a '</span> + toss + <span class="hljs-string">'.'</span>); }); <span class="hljs-transposed_variable">console.</span><span class="hljs-built_in">log</span>(<span class="hljs-string">'3'</span>);
Interactive Heatmaps with Google Maps API v3
Thanks to the Google Maps API it is pretty easy to code up a small JavaScript to turn a bunch of points into an interactively explorable and lovely looking heatmap. You’re welcome to give it a try on heatmap.joyofdata.de where you can load a CSV to display its contained points.
A CORS POST request works from plain javascript, but why not with jQuery?
<span class="pln">$</span><span class="pun">.</span><span class="pln">ajax</span><span class="pun">(</span><span class="pln">url</span><span class="pun">,</span> <span class="pun">{</span><span class="pln"> type</span><span class="pun">:</span><span class="str">"POST"</span><span class="pun">,</span><span class="pln"> dataType</span><span class="pun">:</span><span class="str">"json"</span><span class="pun">,</span><span class="pln"> data</span><span class="pun">:{</span><span class="pln">action</span><span class="pun">:</span><span class="str">"something"</span><span class="pun">},</span><span class="pln"> success</span><span class="pun">:</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">data</span><span class="pun">,</span><span class="pln"> textStatus</span><span class="pun">,</span><span class="pln"> jqXHR</span><span class="pun">)</span> <span class="pun">{</span><span class="pln">alert</span><span class="pun">(</span><span class="str">"success"</span><span class="pun">);},</span><span class="pln"> error</span><span class="pun">:</span> <span class="kwd">function</span><span class="pun">(</span><span class="pln">jqXHR</span><span class="pun">,</span><span class="pln"> textStatus</span><span class="pun">,</span><span class="pln"> errorThrown</span><span class="pun">)</span> <span class="pun">{</span><span class="pln">alert</span><span class="pun">(</span><span class="str">"failure"</span><span class="pun">);}</span> <span class="pun">});</span>