promise.php
<?php
// Test various AJAX and Promise calls.
// This uses ../test_examples/examples/uptime.php and
// ../test_examples/examples/query.ajax.php for Ajax calls.
// Load info from mysitemap.json for use by my framework SiteClass.
// Check SiteClass out at https://github.com/bartonlp/site-class.
// It has full documentation at that site.
$_site = require_once(getenv("SITELOADNAME"));
$S = new $_site->className($_site); // $S gives access to my framework.
// AJAX 'page' == 'form'
if($_POST['page'] == 'form') {
$name = $_POST['username'];
$value = $_POST['id'];
echo "AJAX Form: name=$name, value=$value";
exit();
}
// AJAX 'page' == 'ajax'
if($_POST['page'] == 'ajax') {
$data = $_POST['data'];
echo "AJAX hello World: $data";
exit();
}
// Get this file for display below.
$promiseText = escapeltgt(file_get_contents("promise.php"));
$uptest = escapeltgt(file_get_contents("../test_examples/examples/uptest.php"));
$query = escapeltgt(file_get_contents("../test_examples/examples/query.ajax.php"));
// Set up the scripts for my framework
$S->b_script = <<<EOF
<script src="https://bartonphillips.net/js/syntaxhighlighter.js"></script>
<link rel='stylesheet' href="https://bartonphillips.net/css/theme.css">
<script>
// RAW javascript to do the promise
var CORSflag = true;
function get(url, type, data) {
// Return a new promise.
return new Promise(function(resolve, reject) {
// Do the usual XHR stuff
var req = new XMLHttpRequest();
req.open(type, url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.onload = function() {
if(req.status == 200) {
// Resolve the promise with the response text
resolve(req.response);
} else {
// Otherwise reject with the status text
// which will hopefully be a meaningful error
reject(Error(req.statusText));
}
};
// Handle network errors
req.onerror = function() {
reject(Error("Network Error"));
};
// Make the request
var d = $.param(data);
//console.log("data: ", d);
req.send(d);
});
}
// We use jQuery to do some of the rest of this.
jQuery(document).ready(function($) {
// use the function above to do an ajax call. This uses the code at the start.
get('promise.php', 'post', {page: 'ajax', data: 'this is a test'}).then(function(response) {
console.log("Success!", response);
$("#response").html(response);
return false;
}, function(error) {
console.log("Failed!", error);
$("#response").html("ERROR from AJAX promise.php");
return false;
});
// This is the 'send' button
$("#send").click(function() {
// Setup the select for the curtime().
sendText('select curtime() as data');
return false;
});
// This is for the 'showpromise' button
$("#showpromise").click(function() {
// Show the div 'promise'.
$("#promise").show();
// Hide the button
$(this).hide();
return false;
});
// Make an ajax call to another file. Returns 'This is from RPI' which is my RPI server at home.
if(CORSflag) {
$.ajax({
url: '../test_examples/examples/uptest.php',
data: { test: 'yes' },
dataType: 'json'
}).done(function(d) {
console.log("DATA", d);
$("#startup").html("AJAX: " + d.TEST);
return false;
}).error(function() {
console.log("ERROR");
return false;
});
}
});
// Another RAW Javascript AJAX call to another file on the server. When called with the select
// statement above it returns the current time.
function sendText(txt) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '../test_examples/examples/query.ajax.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function(e) {
if (this.status == 200) {
var newtxt = JSON.parse(this.responseText);
console.log("newtxt", newtxt);
var date = newtxt[0].data;
$("#response").html(date);
}
};
xhr.send("sql="+txt);
}
// Send form data via AJAX via the input line:
// <input type="submit" onclick="return sendForm(this.form);">
function sendForm(form) {
var formData = new FormData(form);
formData.append("page", "form");
var xhr = new XMLHttpRequest();
xhr.open('POST', form.action, true);
xhr.onload = function(e) {
$("#response").html(e.currentTarget.response);
};
xhr.send(formData);
return false;
}
// Check if CORS is available for this site.
// Another RAW Javascript function.
var req = new XMLHttpRequest();
req.open("GET", "../test_examples/examples/uptest.php" , true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.onload = function() {
if(req.status == 200) {
// Resolve the promise with the response text
console.log("CORS OK");
} else {
// Otherwise reject with the status text
// which will hopefully be a meaningful error
console.log(req.statusText);
}
};
// Handle network errors
req.onerror = function() {
console.log("Network Error");
CORSflag = false;
};
req.send();
</script>
EOF;
// Setup the css for my framework
$S->css =<<<EOF
#promise {
display: none;
}
EOF;
// Get the $top and $footer using my framework
[$top, $footer] = $S->getPageTopBottom();
echo <<<EOF
$top
<form id="myform" name="myform" action="promise.php">
<input type="text" name="username" value="johndoe">
<input type="number" name="id" value="123456">
<input type="submit" onclick="return sendForm(this.form);">
</form>
<button id="send">Get The Time</button>
<div id="startup"></div>
<div id="response"></div>
<hr>
<button id="showpromise">View the file
<b>promise.php</b>, <b>query.ajax.php</b> and <b>uptest.php</b></button>
<div id="promise">
<p>promise.php</p>
<pre class='brush: php'>
$promiseText
</pre>
<p>query.ajax.php</p>
<pre class='brush: php'>
$query
</pre>
<p>uptest.php</p>
<pre class='brush: php'>
$uptest
</pre>
</div>
$footer
EOF;
query.ajax.php
<?php
// This is a little test script to do a sql query and fetch.
// It is used by query-test.php which does the new 'async' 'await' in javascript.
// The AJAX call is raw javascript no jQuery.
// Also used by https://www.bartonphillips.com/promise.php
$_site = require_once(getenv("SITELOADNAME"));
$S = new Database($_site);
if($sql = $_POST['sql']) {
//error_log("sql" . print_r($_POST, true));
$S->sql($sql);
$rows = [];
while($row = $S->fetchrow('assoc')) {
//error_log("row: ". print_r($row, true));
$rows[] = $row;
}
echo json_encode($rows);
exit();
}
echo "<h1>GO AWAY</h1>";
uptest.php
<?php
// AJAX for http://www.bartonphillips.con/articles/promise.php
// We send test==yes.
if($_GET['test'] == 'yes') {
$ret = array("TEST"=>"This is from uptest.php");
echo json_encode($ret);
//error_log("TEST: ". print_r($ret, true));
exit();
}
echo "Go Away";