Dati da un server
I dati utilizzati nel precedente capitolo è stato recuperato da un server.
Il codice del server per il recupero dei dati dinamici da un database può essere scritto in molte lingue diverse.
Ecco alcuni esempi:
Server in esecuzione PHP e MySQL
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type:
application/json; charset=UTF-8");
$conn =
new mysqli("myServer", "user", "pass", "myDB");
$result = $conn->query("SELECT
CompanyName, City, Country FROM Customers");
$outp = "";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
if ($outp != "") {$outp .= ",";}
$outp .= '{"Name":"' . $rs["CompanyName"] . '",';
$outp .= '"City":"' . $rs["City"] . '",';
$outp .= '"Country":"'. $rs["Country"] . '"}';
}
$outp ='{"customers":['.$outp.']}';
$conn->close();
echo($outp);
?>
Le richieste HTTP Cross-Site
Le richieste di dati da un server diverso (rispetto alla pagina di richiedere), sono chiamati richieste HTTP cross-site.
le richieste cross-site sono molto comuni sul web. Molte pagine carico del CSS, immagini o script da diversi server.
Nel browser moderni, cross-site richieste HTTP da script sono limitati allo stesso sito per motivi di sicurezza.
La seguente riga (nell'esempio PHP sopra) può essere aggiunto per consentire l'accesso alla pagina da un cross-site:
header("Access-Control-Allow-Origin: *");
Server in esecuzione Node.js e MySQL
var express = require('express');
var app = express();
app.get('/',
function (req, res) {
var sql = require("mssql");
var config = {user:'user', password:'pass',
server:'myServer', database:'myDB'};
sql.connect(config, function (err) {
if (err)
console.log(err);
var request = new
sql.Request();
request.query('SELECT CompanyName, City, Country FROM Customers', function (err, recordset) {
if
(err) console.log(err)
res.send(recordset);
});
});
});
var server = app.listen(5000, function () {
console.log('Server is running..');
});
Server che esegue ASP.NET, Razor e SQL Lite
@{
Response.AppendHeader("Access-Control-Allow-Origin", "*")
Response.AppendHeader("Content-type",
"application/json")
var db =
Database.Open("myDB");
var query = db.Query("SELECT CompanyName,
City, Country FROM Customers");
var outp =""
var
c = chr(34)
}
@foreach(var row in
query)
{
if outp <> "" then outp = outp + ","
outp = outp + "{" + c + "Name" + c + ":" + c
+ @row.CompanyName + c + ","
outp = outp + c
+ "City" + c + ":" + c
+ @row.City + c + ","
outp = outp
+ c + "Country" + c
+ ":" + c + @row.Country + c + "}"
}
outp ="{" + c
+ "customers" + c + ":[" + outp + "]}"
@outp
Server in esecuzione PHP e MS Access
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type:
application/json; charset=ISO-8859-1");
$conn = new COM("ADODB.Connection");
$conn->open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=myDB.mdb");
$rs = $conn->execute("SELECT CompanyName, City, Country FROM
Customers");
$outp = "";
while (!$rs->EOF) {
if ($outp != "") {$outp .= ",";}
$outp .= '{"Name":"' . $rs["CompanyName"] . '",';
$outp .= '"City":"' . $rs["City"] . '",';
$outp .= '"Country":"'. $rs["Country"] . '"}';
$rs->MoveNext();
}
$outp ='{"customers":['.$outp.']}';
$conn->close();
echo ($outp);
?>
Server che esegue ASP.NET, VB e MS Access
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<%
Response.AppendHeader("Access-Control-Allow-Origin", "*")
Response.AppendHeader("Content-type",
"application/json")
Dim conn As
OleDbConnection
Dim objAdapter As OleDbDataAdapter
Dim objTable As
DataTable
Dim objRow As DataRow
Dim objDataSet As New DataSet()
Dim outp
Dim c
conn = New OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data
source=myDB.mdb")
objAdapter = New OledbDataAdapter("SELECT
CompanyName, City, Country FROM Customers", conn)
objAdapter.Fill(objDataSet,
"myTable")
objTable=objDataSet.Tables("myTable")
outp = ""
c = chr(34)
for each x in objTable.Rows
if outp <> "" then outp = outp & ","
outp = outp & "{" & c & "Name" & c & ":" & c & x("CompanyName")
& c & ","
outp = outp & c & "City" & c & ":" & c
& x("City") & c & ","
outp = outp & c & "Country" & c
& ":" & c & x("Country") & c & "}"
next
outp
="{" & c & "customers" & c & ":[" & outp & "]}"
conn.close
response.write(outp)
%>