SlideShare a Scribd company logo
AJAX Data Transfer
Client-Server Apps - The Easy Way
Agenda
JSON

Modify DOM by Server Data

Web Sockets
Communication
Different systems use
different data formats

Each platform has its
own logic

Need to decide on a
language or protocol
Requirements

What do we need from
such a protocol ?
Requirements
Wide server support

Wide client support

Easy to debug

Pass firewalls
Meet JSON
JSON
Stands for JavaScript {!
“name”
Object Notation

Text based

Widely Supported

Simple

: “Bob”,!
“age”
: 19,!
“image” : “zombie.png”


}
JSON
Stands for JavaScript
Object Notation

Text based


name : “Bob”,!
age
: 19,!
Comple
te Rule image : “zombie.png”

set:
http://w
ww.jso}
n.org/

Widely Supported

Simple

{!
JSON Values
KEY

Simple Values


{!
name : “Bob”,!
age
: 19,!
image : “zombie.png”


Arrays

Nested Hashes

VALUE

}
Simple Values
“text”

number

true

false

null
Arrays
A list of comma separated values enclosed in
brackets

[1, 2, 3]

[“a”, “b”, “c”]

[1, 2, [“a”, “b”], “hello”, true]
Objects
A nested data object can also act as a value

Example:



{ foo : { a : 1, b : 2 } }
JSON - Getting Better
No need to write JSON by hand

Here’s a partial list of languages which produce
JSON objects for you:

ASP, ActionScript, BlitzMax, C, C++, C#, Clojure,
ColdFusion, Delphi, Eiffel, Erlang, Go, Haskell,
Java, JavaScript, Lasso, Lisp, LotusScript, Lua,
Objective C, Objective CAML, Perl, PHP, Python,
Qt, Ruby, Tcl, Visual Basic, And More...
JSON Alternatives

XML

Dedicated Format
Using JSON
JSON Use Case
Flights To Paris

Client
Results

Server
App

{ Flights: [
{ departure: “02:00”, price: 600 },
{ departure: “06:00”, price: 800 },
{ departure: “00:00”, price: 999 }
]}

Server

DB
JSON Use Case
Client request - “Paris”

Server gets request

Server performs DB query

Server creates the response JSON object

Server sends the response to client
Demo: Time Server

Server returning time of day using Ruby & Sinatra

App which shows the data
jQuery Functions
$.get - sends a get request to the server. 

Takes a url, optional data, success handler and
data type.

$.post - sends a post request to the server. 

Takes a url, optional data, success handler and
data type.
get/post Examples
$.get(‘test.php’);
$.post(‘test.php’, { name : ‘john’, time: ‘2pm’ });
$.get(‘test.php’, function(data) {
alert(data);

});
$.ajax
Gain full control over the request

Can handle errors

get/post are actually just shortcuts for this one

Takes url and settings object
$.ajax Settings
error: error handler callback

success: success handler callback

context: the ‘this’ pointer of callbacks

data: data object to send

url: the url to use

Full docs: http://api.jquery.com/jQuery.ajax/
$.ajax Example

$.ajax({!
   type: "POST",!
   url: "some.php",!
   data: "name=John&location=Boston",!
   success: function(msg){!
     alert( "Data Saved: " + msg );!
   }!
 });!
Same Origin Policy
Cross origin writes:
Allowed

Cross origin embeds: 

Allowed

Cross origin reads:

Denied
But I Want To
Implement an API
Use JSONP

Use CORS
JSONP Explained
Use cross origin embeds:




<script src="http://www.myapi.com/places"></script>


Script returns function, not data:



callback(['home', 'work', 'mobile']);
What’s wrong with
JSONP ?
Need to specify a callback as global function

Need to add <script> tag dynamically

Can’t post
CORS To The Rescue
CORS Goal

Differentiate good cross origin request from a
malicious one
CORS How

I come from www.friend.com
Please send me /contacts/all.json
CORS How
Browser sends Origin: request header

Server checks Origin to check it’s allowed

Server sends Access-Control-Allow-Origin
to let browser know the request was OK
CORS Keep In Mind
Be sure to verify Origin on the server

ASP.NET Howto:



http://www.asp.net/web-api/overview/security/
enabling-cross-origin-requests-in-web-api
Q&A
Practice
Use your favorite Server Side Technology

Implement a mobile wall:

App displays a long list of sentences (the wall)

Each user can add a sentence to the wall

Everyone shares the same wall
Handlebar
Mustache
JS Templating lib that rocks
Concepts
Create parts of the DOM dynamically by using
JavaScript, based on data that is stored as JS
objects

Template + Data = HTML
Use Cases
Data is collected from
the server

Data is retrieved form
local storage

Data is aggregated
from multiple sources

Translations
http://loveandasandwich.deviantart.com/art/MustacheMonsterssss-201209873
Selected Libraries
mustache.js

handlebars

ejs

pure.js

underscore.js

And many more...
The How
A template looks like
normal html code

Special placeholders
are inserted in the
template

<div class="entry">	
  <h1>{{name}}</h1>	
  <span>{{details}}</span>	
</div>
The How
Each template is
rendered with a
context.

The context is a
JavaScript object that
provides values for the
placeholders

{	
  name: "Jimmy Jones",	
  details: "A friend of Ghandi"	
}
Combined
<div class="entry">	
  <h1>{{name}}</h1>	
  <span>{{details}}</span>	
</div>	

+

{	
  name: "Jimmy Jones",	
  details: "A friend of Ghandi"	
}	

<div class="entry">	
  <h1>Jimmy Jones</h1>	
  <span> A friend of Ghandi </span>	
</div>
Demo
Using a template
embedded inside the
html file as a script

Code: ajax/
Handlebars/Demo1/
Using Handlebars
Rendering Objects

Rendering Arrays

Conditional Rendering (if)

Helpers
Rendering Objects
Can use a block
expression in the
template

This will use a different
context for the
rendering

Example: With

<div class="entry">	
  <h1>{{title}}</h1>	
  {{#with author}}	

!
  <span>By: {{first}} {{last}}</span>	

!
  {{/with}}	
</div>	

var ctx = {	
  title: "Alice's Adventures in
Wonderland",	
  author: {	
    first: 'Lewis',	
    last: 'Carrol'	
  }	
};
Rendering Arrays
The each block helper
renders each element
in an array in its own
entry

Inside the block, this
refers to the current
element

<ul class="people_list">	
  {{#each people}}	
!
  <li>{{this}}</li>	
!
  {{/each}}	
</ul>
{	
  people: [	
    "Yehuda Katz",	
    "Alan Johnson",	
    "Charles Jolley"	
  ]	
}
Conditional Rendering
Renders a portion of
the template based on
a condition

If the argument is falsy,
the block won’t be
rendered

<div class="entry">!
  {{#if author}}!
    <h1>{{firstName}} {{lastName}}</h1>!
  {{/if}}!
</div>!
Helpers
Run JS Code and put
its result inside the
mustache

The code is predefined
as a helper

Demo: ajax/
Handlebars/Demo2
Demo: Handlebars data
from server
Exercise
Write a simple todo manager using Handlebars

Use a form to add a todo item

Use localStorage to save all items

Use a handlebar template to create the todo list
from the local storage
Server To Client

HTTP is only one way client to server protocol

How can the server tell all clients that something
new has happened ?
Server To Client
Client frequent
refreshes

Web Comet

Coined as a play on
Ajax
Web Sockets
Demo:
http://rumpetroll.com/
Web Sockets
New Feature of HTML5

Needs a dedicated server supporting web sockets 

Server-Side implementations:

Socket.IO, Jetty (Java), Ruby, Python, Perl

Client Side: Native support on iPhone. 

Full Solution: Socket.IO
Web Socket Arch

Socket Server

(Node.js)

MQ / DB

WEB SOCKETS

Application
Server

HTTP
Client

Browser
Web Sockets Paradigm
Use a dedicated node.js or other server for
communicating with clients

Use a MQ server to connect node.js to your
application server

juggernaut does this for you
Web Sockets Client
var connection = new WebSocket('ws://foo.org/wall');

connection.onopen = function () {!
connection.send('Ping'); !
};!
!
connection.onerror = function (error) {!
console.log('WebSocket Error ' + error);!
};!
!
connection.onmessage = function (e) {!
console.log('Server: ' + e.data);!
};!
Web Sockets Today
Currently, Web sockets are not widely supported

socket.io is a node.js implementation overriding
this problem by providing good fallbacks

socket.io also provides a lot of extra functionality
over existing web sockets

Let’s modify our code to work with socket.io
Web Sockets Client
var socket = io.connect('http://localhost:8080');

socket.on(‘connect’, function () {!
connection.send('Ping'); !
});!
!
socket.on(‘disconnect’, function () {!
console.log(‘socket down’);!
};!
!
socket.on(‘message’, function (data) {!
console.log('Server: ' + data);!
};!
Demo: Echo Socket
Q&A
Thank You

Ynon Perek

ynonperek@yahoo.com

ynonperek.com

More Related Content

What's hot (20)

PPT
High Performance Ajax Applications
Julien Lecomte
 
PPT
WordPress and Ajax
Ronald Huereca
 
PDF
The Best (and Worst) of Django
Jacob Kaplan-Moss
 
PDF
High Performance Ajax Applications
Siarhei Barysiuk
 
PDF
Everything is Awesome - Cutting the Corners off the Web
James Rakich
 
PPT
jQuery and_drupal
BlackCatWeb
 
KEY
Geotalk presentation
Eric Palakovich Carr
 
PPTX
Don't Over-React - just use Vue!
Raymond Camden
 
PDF
Django a whirlwind tour
Brad Montgomery
 
PDF
APIs for modern web apps
Chris Mills
 
PPT
Drupal image gallery_workshop
Heather Bohn
 
PPT
SenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web Apps
Sencha
 
PDF
APIs, now and in the future
Chris Mills
 
PDF
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
PDF
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
PDF
Web versus Native: round 1!
Chris Mills
 
PDF
Aligning Ember.js with Web Standards
Matthew Beale
 
PDF
Empowering the "mobile web"
Chris Mills
 
PPT
Ajax Performance
kaven yan
 
PDF
WebSockets wiith Scala and Play! Framework
Fabio Tiriticco
 
High Performance Ajax Applications
Julien Lecomte
 
WordPress and Ajax
Ronald Huereca
 
The Best (and Worst) of Django
Jacob Kaplan-Moss
 
High Performance Ajax Applications
Siarhei Barysiuk
 
Everything is Awesome - Cutting the Corners off the Web
James Rakich
 
jQuery and_drupal
BlackCatWeb
 
Geotalk presentation
Eric Palakovich Carr
 
Don't Over-React - just use Vue!
Raymond Camden
 
Django a whirlwind tour
Brad Montgomery
 
APIs for modern web apps
Chris Mills
 
Drupal image gallery_workshop
Heather Bohn
 
SenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web Apps
Sencha
 
APIs, now and in the future
Chris Mills
 
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
Web versus Native: round 1!
Chris Mills
 
Aligning Ember.js with Web Standards
Matthew Beale
 
Empowering the "mobile web"
Chris Mills
 
Ajax Performance
kaven yan
 
WebSockets wiith Scala and Play! Framework
Fabio Tiriticco
 

Viewers also liked (20)

PDF
Css2
Ynon Perek
 
PDF
Html5 apis
Ynon Perek
 
PDF
Writing Reusable Web Components with jQuery and jQuery UI
Ynon Perek
 
PDF
Frontend Engineer Toolbox
Ynon Perek
 
PDF
03 css
Ynon Perek
 
PPTX
AJAX and JSON
Julie Iskander
 
PPSX
Dynamic webpages using AJAX & JSON
Christiaan Rakowski
 
PDF
JSON and AJAX JumpStart
dominion
 
PDF
Intro to SVGs
Ynon Perek
 
PDF
Scalable JavaScript
Ynon Perek
 
PPT
Ajax by Examples 2
Yenwen Feng
 
PDF
03 Advanced JavaScript
Ynon Perek
 
PDF
Performance
Ynon Perek
 
PDF
02 JavaScript Syntax
Ynon Perek
 
PDF
When Ajax Attacks! Web application security fundamentals
Simon Willison
 
PDF
JavaScript DOM Manipulations
Ynon Perek
 
PPTX
Introduction to JSON & AJAX
Collaboration Technologies
 
PDF
Web Programming Intro
Ynon Perek
 
PPTX
HTTP, JSON, REST e AJAX com AngularJS
Rodrigo Branas
 
PDF
Introduction to JSON
Kanda Runapongsa Saikaew
 
Html5 apis
Ynon Perek
 
Writing Reusable Web Components with jQuery and jQuery UI
Ynon Perek
 
Frontend Engineer Toolbox
Ynon Perek
 
03 css
Ynon Perek
 
AJAX and JSON
Julie Iskander
 
Dynamic webpages using AJAX & JSON
Christiaan Rakowski
 
JSON and AJAX JumpStart
dominion
 
Intro to SVGs
Ynon Perek
 
Scalable JavaScript
Ynon Perek
 
Ajax by Examples 2
Yenwen Feng
 
03 Advanced JavaScript
Ynon Perek
 
Performance
Ynon Perek
 
02 JavaScript Syntax
Ynon Perek
 
When Ajax Attacks! Web application security fundamentals
Simon Willison
 
JavaScript DOM Manipulations
Ynon Perek
 
Introduction to JSON & AJAX
Collaboration Technologies
 
Web Programming Intro
Ynon Perek
 
HTTP, JSON, REST e AJAX com AngularJS
Rodrigo Branas
 
Introduction to JSON
Kanda Runapongsa Saikaew
 
Ad

Similar to 08 ajax (20)

PPT
CTS Conference Web 2.0 Tutorial Part 2
Geoffrey Fox
 
PPTX
Introduction to node.js
Adrien Guéret
 
PPTX
Walther Ajax4
rsnarayanan
 
PDF
Node.js introduction
Parth Joshi
 
PPTX
Web api
udaiappa
 
PPT
Dojo - from web page to web apps
yoavrubin
 
PPT
Synapseindia dot net development web applications with ajax
Synapseindiappsdevelopment
 
PPT
Ajax
rahmed_sct
 
PPT
Mashup
Naveen P.N
 
PPT
Using Ajax In Domino Web Applications
dominion
 
PDF
Comet from JavaOne 2008
Joe Walker
 
PPTX
Scalable network applications, event-driven - Node JS
Cosmin Mereuta
 
PPTX
Web Technologies - forms and actions
Aren Zomorodian
 
PDF
Con fess 2013-sse-websockets-json-bhakti
Bhakti Mehta
 
PDF
Server Side Swift - AppBuilders 2017
Jens Ravens
 
PPT
nodejs_at_a_glance.ppt
WalaSidhom1
 
PPT
nodejs_at_a_glance, understanding java script
mohammedarshadhussai4
 
PPTX
Node.js web-based Example :Run a local server in order to start using node.js...
Kongu Engineering College, Perundurai, Erode
 
PDF
Play Framework: async I/O with Java and Scala
Yevgeniy Brikman
 
PPT
Java Script Based Client Server Webapps 2
kriszyp
 
CTS Conference Web 2.0 Tutorial Part 2
Geoffrey Fox
 
Introduction to node.js
Adrien Guéret
 
Walther Ajax4
rsnarayanan
 
Node.js introduction
Parth Joshi
 
Web api
udaiappa
 
Dojo - from web page to web apps
yoavrubin
 
Synapseindia dot net development web applications with ajax
Synapseindiappsdevelopment
 
Mashup
Naveen P.N
 
Using Ajax In Domino Web Applications
dominion
 
Comet from JavaOne 2008
Joe Walker
 
Scalable network applications, event-driven - Node JS
Cosmin Mereuta
 
Web Technologies - forms and actions
Aren Zomorodian
 
Con fess 2013-sse-websockets-json-bhakti
Bhakti Mehta
 
Server Side Swift - AppBuilders 2017
Jens Ravens
 
nodejs_at_a_glance.ppt
WalaSidhom1
 
nodejs_at_a_glance, understanding java script
mohammedarshadhussai4
 
Node.js web-based Example :Run a local server in order to start using node.js...
Kongu Engineering College, Perundurai, Erode
 
Play Framework: async I/O with Java and Scala
Yevgeniy Brikman
 
Java Script Based Client Server Webapps 2
kriszyp
 
Ad

More from Ynon Perek (20)

PDF
Regexp
Ynon Perek
 
PDF
Html5 intro
Ynon Perek
 
PDF
09 performance
Ynon Perek
 
PDF
Mobile Web Intro
Ynon Perek
 
PDF
Qt multi threads
Ynon Perek
 
PDF
Vimperl
Ynon Perek
 
PDF
Syllabus
Ynon Perek
 
PDF
Mobile Devices
Ynon Perek
 
PDF
Network
Ynon Perek
 
PDF
Architecture app
Ynon Perek
 
PDF
Cryptography
Ynon Perek
 
PDF
Unit Testing JavaScript Applications
Ynon Perek
 
PDF
How to write easy-to-test JavaScript
Ynon Perek
 
PDF
Introduction to Selenium and Ruby
Ynon Perek
 
PDF
Introduction To Web Application Testing
Ynon Perek
 
PDF
Accessibility
Ynon Perek
 
PDF
Angularjs
Ynon Perek
 
PDF
Js memory
Ynon Perek
 
PDF
Qt Design Patterns
Ynon Perek
 
PDF
Web Application Security
Ynon Perek
 
Regexp
Ynon Perek
 
Html5 intro
Ynon Perek
 
09 performance
Ynon Perek
 
Mobile Web Intro
Ynon Perek
 
Qt multi threads
Ynon Perek
 
Vimperl
Ynon Perek
 
Syllabus
Ynon Perek
 
Mobile Devices
Ynon Perek
 
Network
Ynon Perek
 
Architecture app
Ynon Perek
 
Cryptography
Ynon Perek
 
Unit Testing JavaScript Applications
Ynon Perek
 
How to write easy-to-test JavaScript
Ynon Perek
 
Introduction to Selenium and Ruby
Ynon Perek
 
Introduction To Web Application Testing
Ynon Perek
 
Accessibility
Ynon Perek
 
Angularjs
Ynon Perek
 
Js memory
Ynon Perek
 
Qt Design Patterns
Ynon Perek
 
Web Application Security
Ynon Perek
 

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PPTX
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PDF
Per Axbom: The spectacular lies of maps
Nexer Digital
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
Per Axbom: The spectacular lies of maps
Nexer Digital
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 

08 ajax

  • 1. AJAX Data Transfer Client-Server Apps - The Easy Way
  • 2. Agenda JSON Modify DOM by Server Data Web Sockets
  • 3. Communication Different systems use different data formats Each platform has its own logic Need to decide on a language or protocol
  • 4. Requirements What do we need from such a protocol ?
  • 5. Requirements Wide server support Wide client support Easy to debug Pass firewalls
  • 7. JSON Stands for JavaScript {! “name” Object Notation Text based Widely Supported Simple : “Bob”,! “age” : 19,! “image” : “zombie.png”
 }
  • 8. JSON Stands for JavaScript Object Notation Text based name : “Bob”,! age : 19,! Comple te Rule image : “zombie.png”
 set: http://w ww.jso} n.org/ Widely Supported Simple {!
  • 9. JSON Values KEY Simple Values {! name : “Bob”,! age : 19,! image : “zombie.png”
 Arrays Nested Hashes VALUE }
  • 11. Arrays A list of comma separated values enclosed in brackets [1, 2, 3] [“a”, “b”, “c”] [1, 2, [“a”, “b”], “hello”, true]
  • 12. Objects A nested data object can also act as a value Example:
 
 { foo : { a : 1, b : 2 } }
  • 13. JSON - Getting Better No need to write JSON by hand Here’s a partial list of languages which produce JSON objects for you: ASP, ActionScript, BlitzMax, C, C++, C#, Clojure, ColdFusion, Delphi, Eiffel, Erlang, Go, Haskell, Java, JavaScript, Lasso, Lisp, LotusScript, Lua, Objective C, Objective CAML, Perl, PHP, Python, Qt, Ruby, Tcl, Visual Basic, And More...
  • 16. JSON Use Case Flights To Paris Client Results Server App { Flights: [ { departure: “02:00”, price: 600 }, { departure: “06:00”, price: 800 }, { departure: “00:00”, price: 999 } ]} Server DB
  • 17. JSON Use Case Client request - “Paris” Server gets request Server performs DB query Server creates the response JSON object Server sends the response to client
  • 18. Demo: Time Server Server returning time of day using Ruby & Sinatra App which shows the data
  • 19. jQuery Functions $.get - sends a get request to the server. 
 Takes a url, optional data, success handler and data type. $.post - sends a post request to the server. 
 Takes a url, optional data, success handler and data type.
  • 20. get/post Examples $.get(‘test.php’); $.post(‘test.php’, { name : ‘john’, time: ‘2pm’ }); $.get(‘test.php’, function(data) { alert(data);
 });
  • 21. $.ajax Gain full control over the request Can handle errors get/post are actually just shortcuts for this one Takes url and settings object
  • 22. $.ajax Settings error: error handler callback success: success handler callback context: the ‘this’ pointer of callbacks data: data object to send url: the url to use Full docs: http://api.jquery.com/jQuery.ajax/
  • 23. $.ajax Example $.ajax({!    type: "POST",!    url: "some.php",!    data: "name=John&location=Boston",!    success: function(msg){!      alert( "Data Saved: " + msg );!    }!  });!
  • 24. Same Origin Policy Cross origin writes: Allowed Cross origin embeds: 
 Allowed Cross origin reads:
 Denied
  • 25. But I Want To Implement an API Use JSONP Use CORS
  • 26. JSONP Explained Use cross origin embeds:
 
 <script src="http://www.myapi.com/places"></script> Script returns function, not data:
 
 callback(['home', 'work', 'mobile']);
  • 27. What’s wrong with JSONP ? Need to specify a callback as global function Need to add <script> tag dynamically Can’t post
  • 28. CORS To The Rescue
  • 29. CORS Goal Differentiate good cross origin request from a malicious one
  • 30. CORS How I come from www.friend.com Please send me /contacts/all.json
  • 31. CORS How Browser sends Origin: request header Server checks Origin to check it’s allowed Server sends Access-Control-Allow-Origin to let browser know the request was OK
  • 32. CORS Keep In Mind Be sure to verify Origin on the server ASP.NET Howto:
 
 http://www.asp.net/web-api/overview/security/ enabling-cross-origin-requests-in-web-api
  • 33. Q&A
  • 34. Practice Use your favorite Server Side Technology Implement a mobile wall: App displays a long list of sentences (the wall) Each user can add a sentence to the wall Everyone shares the same wall
  • 36. Concepts Create parts of the DOM dynamically by using JavaScript, based on data that is stored as JS objects Template + Data = HTML
  • 37. Use Cases Data is collected from the server Data is retrieved form local storage Data is aggregated from multiple sources Translations http://loveandasandwich.deviantart.com/art/MustacheMonsterssss-201209873
  • 39. The How A template looks like normal html code Special placeholders are inserted in the template <div class="entry">   <h1>{{name}}</h1>   <span>{{details}}</span> </div>
  • 40. The How Each template is rendered with a context. The context is a JavaScript object that provides values for the placeholders {   name: "Jimmy Jones",   details: "A friend of Ghandi" }
  • 41. Combined <div class="entry">   <h1>{{name}}</h1>   <span>{{details}}</span> </div> + {   name: "Jimmy Jones",   details: "A friend of Ghandi" } <div class="entry">   <h1>Jimmy Jones</h1>   <span> A friend of Ghandi </span> </div>
  • 42. Demo Using a template embedded inside the html file as a script Code: ajax/ Handlebars/Demo1/
  • 43. Using Handlebars Rendering Objects Rendering Arrays Conditional Rendering (if) Helpers
  • 44. Rendering Objects Can use a block expression in the template This will use a different context for the rendering Example: With <div class="entry">   <h1>{{title}}</h1>   {{#with author}} !   <span>By: {{first}} {{last}}</span> !   {{/with}} </div> var ctx = {   title: "Alice's Adventures in Wonderland",   author: {     first: 'Lewis',     last: 'Carrol'   } };
  • 45. Rendering Arrays The each block helper renders each element in an array in its own entry Inside the block, this refers to the current element <ul class="people_list">   {{#each people}} !   <li>{{this}}</li> !   {{/each}} </ul> {   people: [     "Yehuda Katz",     "Alan Johnson",     "Charles Jolley"   ] }
  • 46. Conditional Rendering Renders a portion of the template based on a condition If the argument is falsy, the block won’t be rendered <div class="entry">!   {{#if author}}!     <h1>{{firstName}} {{lastName}}</h1>!   {{/if}}! </div>!
  • 47. Helpers Run JS Code and put its result inside the mustache The code is predefined as a helper Demo: ajax/ Handlebars/Demo2
  • 49. Exercise Write a simple todo manager using Handlebars Use a form to add a todo item Use localStorage to save all items Use a handlebar template to create the todo list from the local storage
  • 50. Server To Client HTTP is only one way client to server protocol How can the server tell all clients that something new has happened ?
  • 51. Server To Client Client frequent refreshes Web Comet Coined as a play on Ajax
  • 53. Web Sockets New Feature of HTML5 Needs a dedicated server supporting web sockets Server-Side implementations:
 Socket.IO, Jetty (Java), Ruby, Python, Perl Client Side: Native support on iPhone. Full Solution: Socket.IO
  • 54. Web Socket Arch Socket Server (Node.js) MQ / DB WEB SOCKETS Application Server HTTP Client Browser
  • 55. Web Sockets Paradigm Use a dedicated node.js or other server for communicating with clients Use a MQ server to connect node.js to your application server juggernaut does this for you
  • 56. Web Sockets Client var connection = new WebSocket('ws://foo.org/wall'); connection.onopen = function () {! connection.send('Ping'); ! };! ! connection.onerror = function (error) {! console.log('WebSocket Error ' + error);! };! ! connection.onmessage = function (e) {! console.log('Server: ' + e.data);! };!
  • 57. Web Sockets Today Currently, Web sockets are not widely supported socket.io is a node.js implementation overriding this problem by providing good fallbacks socket.io also provides a lot of extra functionality over existing web sockets Let’s modify our code to work with socket.io
  • 58. Web Sockets Client var socket = io.connect('http://localhost:8080'); socket.on(‘connect’, function () {! connection.send('Ping'); ! });! ! socket.on(‘disconnect’, function () {! console.log(‘socket down’);! };! ! socket.on(‘message’, function (data) {! console.log('Server: ' + data);! };!
  • 60. Q&A