Skip to content

Instantly share code, notes, and snippets.

@jwoglom
Forked from 140bytes/LICENSE.txt
Last active February 1, 2018 13:49
Show Gist options
  • Save jwoglom/5bebe40cbbf904ba6177 to your computer and use it in GitHub Desktop.
Save jwoglom/5bebe40cbbf904ba6177 to your computer and use it in GitHub Desktop.
Mini XmlHTTP: Ajax GET/POST function using XmlHTTPRequest

140byt.es

A tweet-sized, fork-to-play, community-curated collection of JavaScript.

How to play

  1. Click the Fork button above to fork this gist.
  2. Modify all the files to according to the rules below.
  3. Save your entry and tweet it up!

Keep in mind that thanks to the awesome sensibilities of the GitHub team, gists are just repos. So feel free to clone yours and work locally for a more comfortable environment, and to allow commit messages.

Rules

All entries must exist in an index.js file, whose contents are

  1. an assignable, valid Javascript expression that
  2. contains no more than 140 bytes, and
  3. does not leak to the global scope.

All entries must also be licensed under the WTFPL or equally permissive license.

For more information

See the 140byt.es site for a showcase of entries (built itself using 140-byte entries!), and follow @140bytes on Twitter.

To learn about byte-saving hacks for your own code, or to contribute what you've learned, head to the wiki.

140byt.es is brought to you by Jed Schmidt, with help from Alex Kloss. It was inspired by work from Thomas Fuchs and Dustin Diaz.

j = function (t, u, d, b, a) { /*
t = GET or POST
u = URL to query (with GET arguments in query string, if any)
d = POST data to send (if using POST, otherwise null)
b = Callback before data is retrieved (used to run
x.setRequestHeader("Content-type","application/x-www-form-urlencoded")
on a POST request)
a = Callback when data is retrieved (reply = x.responseText)
*/
x = new XMLHttpRequest(), // Create a XHR object (sorry, IE < 7)
x.onreadystatechange = function () { // Create a callback for when the state changes
4 == x.readyState && 200 == x.status && a() // Run the after callback when data is retrieved
};
x.open(t, u); // Open the connection using type t (GET or POST) on URL u
b(); // Run the before connection callback to set other headers
x.send(d) // Send the request with data d (null if GET, data if POST).
}
j=function(t,u,d,b,a){x=new XMLHttpRequest(),x.onreadystatechange=function(){4==x.readyState&&200==x.status&&a()};x.open(t,u);b();x.send(d)}
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2014 James Woglom <wogloms.com>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
{
"name": "Mini XMLHttp",
"description": "Performs an XMLHttpRequest using GET or POST in exactly 140 characters.",
"keywords": [
"ajax",
"xmlhttp",
"xmlhttprequest",
"get",
"post",
"requests"
]
}
<!DOCTYPE html>
<title>Mini XMLHttp</title>
<h2>GET Request:</h2>
<div>Expected value: <b>Hello world.</b></div>
<div>Actual value: <b id="ret"></b></div>
<script>
// write a small example that shows off the API for your example
// and tests it in one fell swoop.
j=function(t,u,a,b,c){x=new XMLHttpRequest(),x.onreadystatechange=function(){4==x.readyState&&200==x.status&&c()};x.open(t,u);b();x.send(a)}
j('GET', 'https://gist.github.com/jwoglom/5bebe40cbbf904ba6177/raw/_XMLHTTP.txt', null, function(){}, function() {
document.getElementById( "ret" ).innerHTML = d.responseText;
});
</script>
@atk
Copy link

atk commented May 6, 2014

x is leaked to the global context; while I agree that there's probably no easier way to ensure the availability of this variable inside the external callbacks, this is a violation of the rules of 140byt.es.

@jwoglom
Copy link
Author

jwoglom commented May 8, 2014

True. If XMLHttpRequest()'s function names were shorter (ahem, onreadystatechange) then that could be avoided. I don't think there's much more minification that can be done here without removing the second callback, which would make POST requests impossible, though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment