A few years ago, I wrote a series of posts discussing how to use Ajax in the WordPress Frontend. The purpose of the series is simple:
We're going to give a very brief overview of what Ajax is, how it works, how to set it up on the front, and understanding the hooks that WordPress provides. We'll also actually build a small project that puts the theory into practice. We'll walk through the source code and we'll also make sure it's available on GitHub, as well.
Generally speaking, the series holds up well but, as with all software under constant development, techniques, APIs, and approaches change. Furthermore, as years pass and we continue to refine our skills, we get better at development and we get better at employing new APIs.
Because of all of the above, I want to revisit the concept of Ajax in WordPress so you see some of the new APIs and how to employ them in your day-to-day work or how to refactor some of the code you may be working with right now.
A word of caution before you go too far into this tutorial: I assume that you have already read through the series linked in the introduction of this article, and that you have some experience with building WordPress plugins.
As with any WordPress plugin, it's important to make sure you define the header so WordPress will be able to read the file in order to introduce the new functionality into the core application.
I'm calling this variation of the plugin Simple Ajax Demo, and it's located in wp-content/plugin/wp-simple-ajax
. The first file I'm creating resides in the root directory of wp-simple-ajax
and is called wp-simple-ajax.php
.
It looks like this:
<?php /** * Plugin Name: Simple Ajax Demo * Description: A simple demonstration of the WordPress Ajax APIs. * Version: 1.0.0 * Author: Tom McFarlin * Author URI: https://tommcfarlin.com/ * License: GPL-2.0+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt */
The code should be self-explanatory, especially if you're used to working with WordPress Plugins; however, the most important thing to understand is that all of the information above is what will drive what the user sees in the WordPress dashboard.
That is, users will see the name, description, and version of the plugin as well as the author's name (which will be linked to the specified URL) when they are presented with the option to activate the plugin.
At this point, the plugin will appear in the WordPress Plugin dashboard but it won't actually do anything because we haven't written any code. In order to make that happen, we'll be approaching this particular plugin using the procedural programming approach rather than the object-oriented approach I've used in most of my tutorials.
The reason for avoiding object-oriented programming right now is twofold:
Ultimately, this series will be covering both types of programming supported by PHP and WordPress.
Most likely, if you've worked with Ajax in the past, then you've done something like this in order to give your plugin the support to make asynchronous calls:
<?php add_action( 'wp_head','acme_add_ajax_support' ); function acme_add_ajax_support() { ?> <script type="text/javascript"> var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>'; </script> <?php }
This particular method isn't inherently wrong, but it does neglect some of the newer APIs I'll cover momentarily. It also mixes PHP, HTML, and JavaScript all in a single function.
It's not great as it gets the job done, but there is a cleaner way to do this.
First, to make sure the plugin can't be directly accessed by anyone, add the following conditional just under the plugin's header:
<?php // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; }
Note the opening PHP tag will not be necessary since this code will come later in a pre-existing PHP file (it's necessary for syntax highlighting right now).
Next, let's set up a function to include WordPress support for Ajax through the use of some of the existing APIs that don't involve mixing languages.
Here's what we'll need to do:
wp_enqueue_script
action.wp_localize_script
API call in order to enqueue WordPress's support for Ajax (which comes from admin-ajax.php
).It seems straightforward enough, doesn't it? Note if you have any questions, you can always add them in the comments. Check out the following code to see if you can follow along:
<?php add_action( 'wp_enqueue_scripts', 'sa_add_ajax_support' ); /** * Adds support for WordPress to handle asynchronous requests on both the front-end * and the back-end of the website. * * @since 1.0.0 */ function sa_add_ajax_support() { wp_localize_script( 'ajax-script', 'sa_demo', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); }
Again, note the opening PHP tag will not be required in the final version of the plugin, as it is here only to take advantage of the syntax highlighting functionality.
With that said, take a look at wp_localize_script
. Before examining each parameter, let's review the purpose of this function. From the Codex, the short version is as follows:
Localizes a registered script with data for a JavaScript variable.
The longer description is important, though:
This lets you offer properly localized translations of any strings used in your script. This is necessary because WordPress currently only offers a localization API in PHP, not directly in JavaScript.
Though localization is the primary use, it can be used to make any data available to your script that you can normally only get from the server side of WordPress.
Now review the parameters it accepts:
handle
and is used to uniquely identify the script that's being added to the page.name
, and this is important as it's how you will identify the script throughout your code. You will see this in much more detail later in the tutorial.data
parameter. It refers to an array that will be sent to the browser as a JavaScript object. Since we're passing the URL of a path to a file, Ajax support will be provided.Notice the first parameter is ajax-script
. Keep this in mind when we turn our attention to writing and enqueuing our own JavaScript, as we'll need to use this handle one more time.
Also remember to make note of the name you've selected for your call to the API, as we'll be using this when working with the client-side code later in this tutorial.
Notice we're only using the wp_enqueue_script
hook and we're not using admin_enqueue_script
. This is because ajaxurl
is already defined in the dashboard.
This means if you're looking to make Ajax requests in the administration area of WordPress, then you don't need to enqueue anything. Everything we're doing in the context of this tutorial is specifically for the front-end of the website.
Now it's time to write a function your JavaScript will call via Ajax. This can be anything you want it to be, but for the purposes of this plugin we're going to set up a function that will return information about the user who is logged into the site.
The plugin will do the following:
We'll be using the console
object that's available in most modern browsers, so make sure you're using Chrome, Safari, or Firefox when working with the JavaScript source you'll be writing.
Now that we've outlined exactly how the code is going to work whenever a user makes an Ajax request to the server, let's start writing a function for doing exactly that. We'll call it sa_get_user_information
.
<?php add_action( 'wp_ajax_get_current_user_info', 'sa_get_current_user_info' ); add_action( 'wp_ajax_nopriv_get_current_user_info', 'sa_get_current_user_info' ); /** * Retrieves information about the user who is currently logged into the site. * * This function is intended to be called via the client-side of the public-facing * side of the site. * * @since 1.0.0 */ function sa_get_current_user_info() { }
The function's implementation will come later in this tutorial, but the primary takeaway from the code above is that we've hooked into both wp_ajax_get_current_user_info
and wp_ajax_nopriv_get_current_user_info
.
These two hooks are well documented in the Codex, but the first hook will allow those who are logged in to the site to access this function. The second hook will allow those who are not logged in to this site to access this function.
Also note everything after wp_ajax_
and wp_ajax_nopriv_
is up to you, as the developer, to define. This will be the name of the function you call from the client-side as you'll see later in this tutorial.
Before implementing the function, the JavaScript source file (that's yet to be written) has been called, and we need to make sure that we're able to handle any errors that may occur.
In our case, the potential errors may be:
It's highly unlikely the second case will be true, but it will help us to learn more about a few more of the WordPress APIs and how we can take advantage of them for handling erroneous requests.
The first thing to understand is WP_Error
. As with many APIs, this is available in the Codex:
Instances of WP_Error store error codes and messages representing one or more errors, and whether or not a variable is an instance of WP_Error can be determined using the is_wp_error() function.
The constructor will accept up to three parameters (though we'll only be using the first two):
Next, we'll be sending the results of the errors back to the client using a function called wp_send_json_error
. This is really easy to use:
Send a JSON response back to an Ajax request, indicating failure. The response object will always have a success key with the value false. If anything is passed to the function in the $data parameter, it will be encoded as the value for a data key.
By combining both WP_Error
and wp_send_json_error
, we can create functions that will help us provide error codes to the JavaScript calling the server-side.
For example, let's say we have a function providing an error if the user isn't logged in to the website. This can be achieved using the following function:
<?php /** * Determines if a user is logged into the site using the specified user ID. If not, * then the following error code and message will be returned to the client: * * -2: The visitor is not currently logged into the site. * * @access private * @since 1.0.0 * * @param int $user_id The current user's ID. */ function _sa_user_is_logged_in( $user_id ) { if ( 0 === $user_id ) { wp_send_json_error( new WP_Error( '-2', 'The visitor is not currently logged into the site.' ) ); } }
Notice the function is marked as private even though it's in the global namespace. It's prefixed with an underscore in order to denote this function should be considered private.
We'll revisit this in the next article.
Secondly, we need to handle the case if the user doesn't exist. To do this, we can create a function that does the following:
<?php /** * Determines if a user is logged into the site using the specified user ID. If not, * then the following error code and message will be returned to the client: * * -3: The visitor does not have an account * * @access private * @since 1.0.0 * * @param int $user_id The current user's ID. */ function _sa_user_exists( $user_id ) { if ( 0 === $user_id ) { wp_send_json_error( new WP_Error( '-3', 'The visitor does not have an account with this site.' ); ); } }
We now have two functions, each of which will send information back to the client if something has failed, but what do we do if both of these functions pass?
If the functions above do not yield any errors, then we need to have a way to send the request back to the client with a successful message and the information that it's requesting.
Namely, we need to send the information back to the client that includes the current user's information in the JSON format.
To do this, we can take advantage of the wp_send_json_success
message. It does exactly what you think it would do, too:
Send a JSON response back to an Ajax request, indicating success. The response object will always have a success key with the value true. If anything is passed to the function it will be encoded as the value for a data key.
Let's combine the work we've done thus far to write a function the JavaScript will eventually call and that leverages the two smaller functions we've placed above. In fact, this will be the implementation of the function we left out earlier in this tutorial:
<?php add_action( 'wp_ajax_get_current_user_info', 'sa_get_current_user_info' ); add_action( 'wp_ajax_nopriv_get_current_user_info', 'sa_get_current_user_info' ); /** * Retrieves information about the user who is currently logged into the site. * * This function is intended to be called via the client-side of the public-facing * side of the site. * * @since 1.0.0 */ function sa_get_current_user_info() { // Grab the current user's ID $user_id = get_current_user_id(); // If the user is logged in and the user exists, return success with the user JSON if ( _sa_user_is_logged_in( $user_id ) && _sa_user_exists( $user_id ) ) { wp_send_json_success( json_encode( get_user_by( 'id', $user_id ) ) ); } }
If the user is logged in and the user exists, then we will send a success message to the client containing the JSON representation of the user. At this point, it's time to write some JavaScript.
First, add a file called frontend.js
to the root of your plugin directory. Initially, it should include the following code:
;(function( $ ) { 'use strict'; $(function() { }); })( jQuery );
The function implementation will be covered momentarily, but we need to make sure we're enqueuing this JavaScript file in the plugin, as well. Return to the function sa_add_ajax_support
and add the following above the call to wp_localize_script
:
<?php wp_enqueue_script( 'ajax-script', plugin_dir_url( __FILE__ ) . 'frontend.js', array( 'jquery' ) );
Remember this script must have the same handle as the one defined in wp_localize_script
. Now we can revisit our JavaScript file and make a call to the server-side code we've been working on throughout this entire article.
In frontend.js
, add the following code:
/** * This file is responsible for setting up the Ajax request each time * a WordPress page is loaded. The page could be the main index page, * a single page, or any other type of information that WordPress renders. * * Once the DOM is ready, it will make an Ajax call to the server where * the `get_current_user_info` function is defined and will then handle the * response based on the information returned from the request. * * @since 1.0.0 */ ;(function( $ ) { 'use strict'; $(function() { /* Make an Ajax call via a GET request to the URL specified in the * wp_enqueue_script call. For the data parameter, pass an object with * the action name of the function we defined to return the user info. */ $.ajax({ url: sa_demo.ajax_url, method: 'GET', data: { action: 'get_current_user_info' } }).done(function( response ) { /* Once the request is done, determine if it was successful or not. * If so, parse the JSON and then render it to the console. Otherwise, * display the content of the failed request to the console. */ if ( true === response.success ) { console.log( JSON.parse( response.data ) ); } else { console.log( response.data ); } }); }); })( jQuery );
Given the number of comments in the code and assuming you're familiar with writing WordPress plugins and have some experience with Ajax, it should be relatively easy to follow.
In short, the code above makes a call to the server-side when the page is loaded and then writes information to the browser's console about the current user.
If a user is logged in, then the information is written out to the console in the form of a JavaScript object since it's being parsed from JSON.
If, on the other hand, the user is not logged in, then another object will be written out displaying an error code along with the message, all of which you will be able to see in the console.
By now, you should have a clear understanding of the APIs WordPress has available for working with Ajax requests for users who are logged in to the site, and for those who are not.
Ultimately, our goal should be to write the cleanest, most maintainable code possible so we have the ability to continue to work with this code as we move into the future. Additionally, we should write code like this so others who may touch our codebase have a clear understanding of what we're trying to do and are also using the best practices given our environment.
In this tutorial, I used a procedural form of programming for all of the code that was shared, demonstrated, and provided via GitHub. As previously mentioned, there's nothing inherently wrong with this, but I do think it's worth seeing what this looks like from an object-oriented perspective.
In the next tutorial, we're going to look at refactoring this code into an object-oriented paradigm that also employs WordPress Coding Standards for further documenting our work, and that uses clear file organization to make our writing as clean and clear as possible.
Remember, you can catch all of my courses and tutorials on my profile page, and you can follow me on my blog and/or Twitter at @tommcfarlin where I talk about software development in the context of WordPress and enjoy conversing with others about the same topics (as well as other things, too).
In the meantime, please don't hesitate to leave any questions or comments in the feed below and I'll aim to respond to each of them.
The Best Small Business Web Designs by DesignRush
/Create Modern Vue Apps Using Create-Vue and Vite
/Pros and Cons of Using WordPress
/How to Fix the “There Has Been a Critical Error in Your Website” Error in WordPress
How To Fix The “There Has Been A Critical Error in Your Website” Error in WordPress
/How Long Does It Take to Learn JavaScript?
/The Best Way to Deep Copy an Object in JavaScript
/Adding and Removing Elements From Arrays in JavaScript
/Create a JavaScript AJAX Post Request: With and Without jQuery
/5 Real-Life Uses for the JavaScript reduce() Method
/How to Enable or Disable a Button With JavaScript: jQuery vs. Vanilla
/How to Enable or Disable a Button With JavaScript: jQuery vs Vanilla
/Confirm Yes or No With JavaScript
/How to Change the URL in JavaScript: Redirecting
/15+ Best WordPress Twitter Widgets
/27 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/21 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/30 HTML Best Practices for Beginners
/31 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)
/25 Ridiculously Impressive HTML5 Canvas Experiments
/How to Implement Email Verification for New Members
/How to Create a Simple Web-Based Chat Application
/30 Popular WordPress User Interface Elements
/Top 18 Best Practices for Writing Super Readable Code
/Best Affiliate WooCommerce Plugins Compared
/18 Best WordPress Star Rating Plugins
/10+ Best WordPress Twitter Widgets
/20+ Best WordPress Booking and Reservation Plugins
/Working With Tables in React: Part Two
/Best CSS Animations and Effects on CodeCanyon
/30 CSS Best Practices for Beginners
/How to Create a Custom WordPress Plugin From Scratch
/10 Best Responsive HTML5 Sliders for Images and Text… and 3 Free Options
/16 Best Tab and Accordion Widget Plugins for WordPress
/18 Best WordPress Membership Plugins and 5 Free Plugins
/25 Best WooCommerce Plugins for Products, Pricing, Payments and More
10 Best WordPress Twitter Widgets
1 /12 Best Contact Form PHP Scripts for 2020
/20 Popular WordPress User Interface Elements
/10 Best WordPress Star Rating Plugins
/12 Best CSS Animations on CodeCanyon
/12 Best WordPress Booking and Reservation Plugins
/12 Elegant CSS Pricing Tables for Your Latest Web Project
/24 Best WordPress Form Plugins for 2020
/14 Best PHP Event Calendar and Booking Scripts
/Create a Blog for Each Category or Department in Your WooCommerce Store
/8 Best WordPress Booking and Reservation Plugins
/Best Exit Popups for WordPress Compared
/Best Exit Popups for WordPress Compared
/11 Best Tab & Accordion WordPress Widgets & Plugins
/12 Best Tab & Accordion WordPress Widgets & Plugins
1New Course: Practical React Fundamentals
/Preview Our New Course on Angular Material
/Build Your Own CAPTCHA and Contact Form in PHP
/Object-Oriented PHP With Classes and Objects
/Best Practices for ARIA Implementation
/Accessible Apps: Barriers to Access and Getting Started With Accessibility
/Dramatically Speed Up Your React Front-End App Using Lazy Loading
/15 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js
/15 Best Modern JavaScript Admin Templates for React, Angular and Vue.js
/19 Best JavaScript Admin Templates for React, Angular, and Vue.js
/New Course: Build an App With JavaScript and the MEAN Stack
/Hands-on With ARIA: Accessibility Recipes for Web Apps
/10 Best WordPress Facebook Widgets
13 /Hands-on With ARIA: Accessibility for eCommerce
/New eBooks Available for Subscribers
/Hands-on With ARIA: Homepage Elements and Standard Navigation
/Site Accessibility: Getting Started With ARIA
/How Secure Are Your JavaScript Open-Source Dependencies?
/New Course: Secure Your WordPress Site With SSL
/Testing Components in React Using Jest and Enzyme
/Testing Components in React Using Jest: The Basics
/15 Best PHP Event Calendar and Booking Scripts
/Create Interactive Gradient Animations Using Granim.js
/How to Build Complex, Large-Scale Vue.js Apps With Vuex
1 /Examples of Dependency Injection in PHP With Symfony Components
/Set Up Routing in PHP Applications Using the Symfony Routing Component
1 /A Beginner’s Guide to Regular Expressions in JavaScript
/Introduction to Popmotion: Custom Animation Scrubber
/Introduction to Popmotion: Pointers and Physics
/New Course: Connect to a Database With Laravel’s Eloquent ORM
/How to Create a Custom Settings Panel in WooCommerce
/Building the DOM faster: speculative parsing, async, defer and preload
1 /20 Useful PHP Scripts Available on CodeCanyon
3 /How to Find and Fix Poor Page Load Times With Raygun
/Introduction to the Stimulus Framework
/Single-Page React Applications With the React-Router and React-Transition-Group Modules
12 Best Contact Form PHP Scripts
1 /Getting Started With the Mojs Animation Library: The ShapeSwirl and Stagger Modules
/Getting Started With the Mojs Animation Library: The Shape Module
/Getting Started With the Mojs Animation Library: The HTML Module
/Project Management Considerations for Your WordPress Project
/8 Things That Make Jest the Best React Testing Framework
/Creating an Image Editor Using CamanJS: Layers, Blend Modes, and Events
/New Short Course: Code a Front-End App With GraphQL and React
/Creating an Image Editor Using CamanJS: Applying Basic Filters
/Creating an Image Editor Using CamanJS: Creating Custom Filters and Blend Modes
/Modern Web Scraping With BeautifulSoup and Selenium
/Challenge: Create a To-Do List in React
1Deploy PHP Web Applications Using Laravel Forge
/Getting Started With the Mojs Animation Library: The Burst Module
/10 Things Men Can Do to Support Women in Tech
/A Gentle Introduction to Higher-Order Components in React: Best Practices
/Challenge: Build a React Component
/A Gentle Introduction to HOC in React: Learn by Example
/A Gentle Introduction to Higher-Order Components in React
/Creating Pretty Popup Messages Using SweetAlert2
/Creating Stylish and Responsive Progress Bars Using ProgressBar.js
/18 Best Contact Form PHP Scripts for 2022
/How to Make a Real-Time Sports Application Using Node.js
/Creating a Blogging App Using Angular & MongoDB: Delete Post
/Set Up an OAuth2 Server Using Passport in Laravel
/Creating a Blogging App Using Angular & MongoDB: Edit Post
/Creating a Blogging App Using Angular & MongoDB: Add Post
/Introduction to Mocking in Python
/Creating a Blogging App Using Angular & MongoDB: Show Post
/Creating a Blogging App Using Angular & MongoDB: Home
/Creating a Blogging App Using Angular & MongoDB: Login
/Creating Your First Angular App: Implement Routing
/Persisted WordPress Admin Notices: Part 4
/Creating Your First Angular App: Components, Part 2
/Persisted WordPress Admin Notices: Part 3
/Creating Your First Angular App: Components, Part 1
/How Laravel Broadcasting Works
/Persisted WordPress Admin Notices: Part 2
/Create Your First Angular App: Storing and Accessing Data
/Persisted WordPress Admin Notices: Part 1
/Error and Performance Monitoring for Web & Mobile Apps Using Raygun
/Using Luxon for Date and Time in JavaScript
7 /How to Create an Audio Oscillator With the Web Audio API
/How to Cache Using Redis in Django Applications
/20 Essential WordPress Utilities to Manage Your Site
/Introduction to API Calls With React and Axios
/Beginner’s Guide to Angular 4: HTTP
/Rapid Web Deployment for Laravel With GitHub, Linode, and RunCloud.io
/Beginners Guide to Angular 4: Routing
/Beginner’s Guide to Angular 4: Services
/Beginner’s Guide to Angular 4: Components
/Creating a Drop-Down Menu for Mobile Pages
/Introduction to Forms in Angular 4: Writing Custom Form Validators
/10 Best WordPress Booking & Reservation Plugins
/Getting Started With Redux: Connecting Redux With React
/Getting Started With Redux: Learn by Example
/Getting Started With Redux: Why Redux?
/How to Auto Update WordPress Salts
/How to Download Files in Python
/Eloquent Mutators and Accessors in Laravel
1 /10 Best HTML5 Sliders for Images and Text
/Site Authentication in Node.js: User Signup
/Creating a Task Manager App Using Ionic: Part 2
/Creating a Task Manager App Using Ionic: Part 1
/Introduction to Forms in Angular 4: Reactive Forms
/Introduction to Forms in Angular 4: Template-Driven Forms
/24 Essential WordPress Utilities to Manage Your Site
/25 Essential WordPress Utilities to Manage Your Site
/Get Rid of Bugs Quickly Using BugReplay
1 /Manipulating HTML5 Canvas Using Konva: Part 1, Getting Started
/10 Must-See Easy Digital Downloads Extensions for Your WordPress Site
/22 Best WordPress Booking and Reservation Plugins
/Understanding ExpressJS Routing
/15 Best WordPress Star Rating Plugins
/Creating Your First Angular App: Basics
/Inheritance and Extending Objects With JavaScript
/Introduction to the CSS Grid Layout With Examples
1Performant Animations Using KUTE.js: Part 5, Easing Functions and Attributes
Performant Animations Using KUTE.js: Part 4, Animating Text
/Performant Animations Using KUTE.js: Part 3, Animating SVG
/New Course: Code a Quiz App With Vue.js
/Performant Animations Using KUTE.js: Part 2, Animating CSS Properties
Performant Animations Using KUTE.js: Part 1, Getting Started
/10 Best Responsive HTML5 Sliders for Images and Text (Plus 3 Free Options)
/Single-Page Applications With ngRoute and ngAnimate in AngularJS
/Deferring Tasks in Laravel Using Queues
/Site Authentication in Node.js: User Signup and Login
/Working With Tables in React, Part Two
/Working With Tables in React, Part One
/How to Set Up a Scalable, E-Commerce-Ready WordPress Site Using ClusterCS
/New Course on WordPress Conditional Tags
/TypeScript for Beginners, Part 5: Generics
/Building With Vue.js 2 and Firebase
6 /Best Unique Bootstrap JavaScript Plugins
/Essential JavaScript Libraries and Frameworks You Should Know About
/Vue.js Crash Course: Create a Simple Blog Using Vue.js
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 5.5 API
/API Authentication With Node.js
/Beginner’s Guide to Angular: HTTP
/Beginner’s Guide to Angular: Routing
/Beginners Guide to Angular: Routing
/Beginner’s Guide to Angular: Services
/Beginner’s Guide to Angular: Components
/How to Create a Custom Authentication Guard in Laravel
/Learn Computer Science With JavaScript: Part 3, Loops
/Build Web Applications Using Node.js
/Learn Computer Science With JavaScript: Part 4, Functions
/Learn Computer Science With JavaScript: Part 2, Conditionals
/Create Interactive Charts Using Plotly.js, Part 5: Pie and Gauge Charts
/Create Interactive Charts Using Plotly.js, Part 4: Bubble and Dot Charts
Create Interactive Charts Using Plotly.js, Part 3: Bar Charts
/Awesome JavaScript Libraries and Frameworks You Should Know About
/Create Interactive Charts Using Plotly.js, Part 2: Line Charts
/Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js
/Build a To-Do API With Node, Express, and MongoDB
/Getting Started With End-to-End Testing in Angular Using Protractor
/TypeScript for Beginners, Part 4: Classes
/Object-Oriented Programming With JavaScript
/10 Best Affiliate WooCommerce Plugins Compared
/Stateful vs. Stateless Functional Components in React
/Make Your JavaScript Code Robust With Flow
/Build a To-Do API With Node and Restify
/Testing Components in Angular Using Jasmine: Part 2, Services
/Testing Components in Angular Using Jasmine: Part 1
/Creating a Blogging App Using React, Part 6: Tags
/React Crash Course for Beginners, Part 3
/React Crash Course for Beginners, Part 2
/React Crash Course for Beginners, Part 1
/Set Up a React Environment, Part 4
1 /Set Up a React Environment, Part 3
/New Course: Get Started With Phoenix
/Set Up a React Environment, Part 2
/Set Up a React Environment, Part 1
/Command Line Basics and Useful Tricks With the Terminal
/How to Create a Real-Time Feed Using Phoenix and React
/Build a React App With a Laravel Back End: Part 2, React
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 9 API
/Creating a Blogging App Using React, Part 5: Profile Page
/Pagination in CodeIgniter: The Complete Guide
/JavaScript-Based Animations Using Anime.js, Part 4: Callbacks, Easings, and SVG
/JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback
/Learn to Code With JavaScript: Part 1, The Basics
/10 Elegant CSS Pricing Tables for Your Latest Web Project
/Getting Started With the Flux Architecture in React
/Getting Started With Matter.js: The Composites and Composite Modules
Getting Started With Matter.js: The Engine and World Modules
/10 More Popular HTML5 Projects for You to Use and Study
/Understand the Basics of Laravel Middleware
/Iterating Fast With Django & Heroku
/Creating a Blogging App Using React, Part 4: Update & Delete Posts
/Creating a jQuery Plugin for Long Shadow Design
/How to Register & Use Laravel Service Providers
2 /Unit Testing in React: Shallow vs. Static Testing
/Creating a Blogging App Using React, Part 3: Add & Display Post
/Creating a Blogging App Using React, Part 2: User Sign-Up
20 /Creating a Blogging App Using React, Part 1: User Sign-In
/Creating a Grocery List Manager Using Angular, Part 2: Managing Items
/9 Elegant CSS Pricing Tables for Your Latest Web Project
/Dynamic Page Templates in WordPress, Part 3
/Angular vs. React: 7 Key Features Compared
/Creating a Grocery List Manager Using Angular, Part 1: Add & Display Items
New eBooks Available for Subscribers in June 2017
/Create Interactive Charts Using Plotly.js, Part 1: Getting Started
/The 5 Best IDEs for WordPress Development (And Why)
/33 Popular WordPress User Interface Elements
/New Course: How to Hack Your Own App
/How to Install Yii on Windows or a Mac
/What Is a JavaScript Operator?
/How to Register and Use Laravel Service Providers
/
waly Good blog post. I absolutely love this…