JavaScript

JSONP

Už se vám někdy stalo, že jste potřebovali z JavaScriptu zavolat skript na úplně jiném serveru? Zkusili jste zavolat URL přes XMLHttpRequest a v konzoli na vás vyskočila hláška:

XMLHttpRequest cannot load http://www.ciziweb.cz/. Origin http://www.vasweb.cz is not allowed by Access-Control-Allow-Origin.

K vyřešení toho problému jsou dva způsoby. Buď použijete Cross-site HTTP požadavky, aby jste povolit přistup, ale v takovém případě musíte mít k oněm cizím stránkám přístup, aby jste pozměnili HTTP hlavičku „Access-Control-Allow-Origin“. Například v PHP:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');

Dále je pak tady ale JSONP (JSON with padding). Což je alternativa k XMLHttpRequestu. Požadavek vypadá takto:

<script type="application/javascript"
        src="http://www.ciziweb.cz/">
</script>

Pochopitelně musí stránka http://www.ciziweb.cz/ vracet JavaScript kód, který se spustí. Podle standadu od Douglase Crockforda (oficiální stránky JSONP) by měla stránka vracet volání funkce (jejiž název by se měl přenášet v URL požadavku) s jedním parametrem, který bude obsahovat data v JSON a funkce by měla být definovaná ještě před požadavkem, tedy né v odpovědi od serveru http://www.ciziweb.cz/.

<script type="application/javascript">
function handle_data(data) {
   alert(data.data_1);
}
</script>
<script type="application/javascript"
        src="http://www.ciziweb.cz/?callback=handle_data">
  // Skript vrátí: handle_data({"data_1": "hello world"});
</script>

Problémem může být, že lze odeslat date pouze přes parametry v URL (GET) a nikoli přes POST.

Číst celé

str_replace() – v PHP, v MySQL, v JavaScriptu

Ukázka přepisovací funkce v PHP, MySQL a Javascriptu.

PHP

// "123 456 798" => "123456789
$telefon = "123 456 789";
$telefon = str_replace(" ","",$telefon);

MySQL

# "123 456 798" => "123456789
SELECT REPLACE(`telefon`, ' ', '') FROM `tabulka`;

JavaScript

// "123 456 798" => "123456789
var telefon = "123 456 789";
telefon = telefon.replace(" ","");

Číst celé

Automatické kompilování CoffeeScriptu

Jedna věc je psát v perfektním jazyce, ale na druhou stranu, koho by pořád bavilo po každé úpravě některého souboru v CoffeeScriptu pořád a pořád dokola spouštět kompilaci. Od jsme se přeci nestali programátory, abychom dělali věci pořád dokola, umíme si je přeci zautomatizovat.

Můžete mít třeba nastavený svůj editor, který při uložení soubor sám zkompiluje. Druhou, podle mě jednoduší možností, hlavně pro začátečníky je, že CoffeeScript po instalaci (i ve Windows) umí hlídat určité složky a pokud se některý soubor změní, tak jej zkompiluje. Stačí spustit proces v příkazové řádce Node.JS:

> coffee -wc -o lib/ src/

Číst celé

Začít s Node.JS je velice jednoduché!

Pokud už máte určité zkušenosti s JavaScriptem, tak pro vás nebude nejmenší problém začít tento jazyk používat i na serveru. Pro testovací účely lze Node.JS nainstalovat a používat i na Windowsech.

Stáhnout Node.JS

Jděte na stránky www.nodejs.org a stáhněte si instalační balíček. Instalace je velice jednoduchá.

Stáhnout CoffeeScript

Samotný JavaScript je velice, no jak to napsat, nepěkný jazyk s řadou neduhů. Spoustu z nich řeší CoffeeScript. Myslíte-li to s JavaScriptem vážně, doporučuju se CoffeeScript naučit. Pokud máte již Node.JS nainstalovaný, spusťtě jeho příkazovou řádku a napište:

npm install -g coffee-script

Pěkné že? Takový pohodlný balíčkovací systém. Podobné (apt,yum) známe z řady Linuxových systémů.

Napsat server

Napsat server, cože? Ano Node.JS je velmi low-level, takže si musíme v JavaScriptu (CoffeeScriptu) napsat aplikaci, která bude naslouchat na určitém portu.

V JS (server.js):

var callback, http;
http = require('http');
callback = function(req, res) {
  res.writeHead(200, {
    'Content-Type': 'text/plain'
  });
  return res.end('Ahoj Coffee\n');
};
http.createServer(callback).listen(80, '127.0.0.1');
console.log('Server running at http://127.0.0.1:80/');

V CS (server.coffee):

http = require 'http'
callback = (req, res) ->
  res.writeHead 200, {'Content-Type': 'text/plain'}
  res.end 'Ahoj Coffee\n'

http.createServer(callback).listen 80, '127.0.0.1'
console.log 'Server running at http://127.0.0.1:80/'

Spustit server

Následně v Node.JS konzoli CoffeeScript zkompilujeme a spustíme JavaScript server:
node

Číst celé