I would like to know how I could disable and enable a button according to the message that ajax returns.
<script>
function showHint(str) {
if (str.length == 0) {
document.getElementById("ajax").innerHTML = "";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("ajax").innerHTML = this.responseText;
}
};
// xmlhttp.open("POST", 'Ajax.php?endpoint=' + str, true);
xmlhttp.open("POST", 'Ajax.php?endpoint=' + str, true);
xmlhttp.send();
}
}
</script>
<span id="ajax"></span>
This is the button that should be disabled in case ajax says that the endpoint is not valid and in case it is correct it should be enabled.
<div class="field">
<div class="control">
<input class="button is-danger is-fullwidth has-text-weight-bold"
type="submit"value="Suscribirse">
</div>
</div>
PHP CODE
<?php
$a[] = "https://127.0.0.1";
$a[] = "https://127.0.0.2";
$q = $_REQUEST["endpoint"];
$hint = "";
if ($q !== "") {
$q = strtolower($q);
$len=strlen($q);
foreach($a as $name) {
if (stristr($q, substr($name, 0, $len))) {
if ($hint === "") {
$hint = $name;
} else {
$hint .= ", $name";
}
}
}
}
echo $hint === "" ? "<p class='help is-danger'>El endpoint no es valido</p>" : "<p class='help is-success'>El endpoint es valido</p>";
?>
Advertisement
Answer
If you modify the PHP to return a more useful response (JSON) you can use the contents of that in a meaningful way in the ajax callback.
<?php
$a[] = "https://127.0.0.1";
$a[] = "https://127.0.0.2";
$q = $_REQUEST["endpoint"];
$hint = "";
if($q !== "") {
$q=strtolower($q);
$len=strlen($q);
foreach($a as $name) {
if (stristr($q, substr($name, 0, $len))) {
if ($hint === "") {
$hint = $name;
} else {
$hint .= ", $name";
}
}
}
}
// create the response based upon the state of the $hint variable ( &/or other conditions too perhaps )
$results=array(
'status' => empty( $hint ) ? false : true,
'message' => empty( $hint ) ? "<p class='help is-danger'>El endpoint no es valido</p>" : "<p class='help is-success'>El endpoint es valido</p>"
);
exit( json_encode( $results ) );
?>
And then tweak the ajax callback to use the response object to enable/disable the button:
function showHint(str) {
let bttn=document.querySelector('.control > input[type="button"]');
if (str.length == 0) {
document.getElementById("ajax").innerHTML = "";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
let json=JSON.parse(this.response);
bttn.disabled=json.status;
document.getElementById("ajax").innerHTML=json.message;
}
};
xmlhttp.open("POST", 'Ajax.php?endpoint=' + str, true);
xmlhttp.send();
}
}