mvwmail
asked on
Making an ASYNC call to a remote script / live feedback on form
I have a script running on my server that takes a VAT number delivered via URL, and checks it
(note the url is broken into two values the first 2 letters and all the numbers behind it as VIES (vat checker) uses those two variables. The script works fine (I have included it below the question for reference). To call it..
and it returns {“is_valid”:true} or {“is_valid”:false}
Now, I have a form on my site with the following fields
and finally a message box
The site is PHP and I have already done chunks of the code
My scenario, as soon as characters are typed in the field vat_number I want to do an async called to vat_checkers.php with the ongoing value being typed in vat_number and check it. This should be live, and constant everytime there is an input.. and when its true, it gets saved, and does a few others thing listed below.
Can anyone advise how to put all these blocks together into a working method as my brain will not grasp this final link. Thank you in advance for any assistance
For reference... the vat script VIES VAT Validator on GitHub
(note the url is broken into two values the first 2 letters and all the numbers behind it as VIES (vat checker) uses those two variables. The script works fine (I have included it below the question for reference). To call it..
(website)/vatchecker.php?vat=xx1234567
and it returns {“is_valid”:true} or {“is_valid”:false}
Now, I have a form on my site with the following fields
<input type=“text” name=“vat_number” id=“vat_number”>
<input type=“text” name=“vat_number_confirmed” id=“vat_number_confirmed”>
and
<input type=“hidden” name=“vat_ok” id=“vat_ok” value=“0”>
and finally a message box
<div id=“vat-ok” style=“display:none;”>Your VAT is ok</div>
<div id=“vat-error” style=“display:block;”>Your VAT is not valid</div>
The site is PHP and I have already done chunks of the code
My scenario, as soon as characters are typed in the field vat_number I want to do an async called to vat_checkers.php with the ongoing value being typed in vat_number and check it. This should be live, and constant everytime there is an input.. and when its true, it gets saved, and does a few others thing listed below.
i.e
$(‘#vat_number’).on('input', function() {
// do my check on vat checker.php with vat=$(“#vat_number”).val()
// when returned JSONresponse is {“is_valid”:true}
{
document.getElementById(“vat_ok”).value = “1”;
document.getElementById(“vat_number_confirmed”).value = $(“#vat_number”).val()
$(“#vat_number”).attr(“disabled”, true);
$(“#vat-ok”).show();
$(“#vat-error”).hide();
});
Can anyone advise how to put all these blocks together into a working method as my brain will not grasp this final link. Thank you in advance for any assistance
For reference... the vat script VIES VAT Validator on GitHub
<?php
class VatValidator
{
public $response;
protected $soap;
// WSDL VIES Url Service.
protected static $url_vies = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
// Valid european countries ISO codes.
protected static $european_countries = array(
'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK'
);
public function __construct ()
{
$this->soap = new SoapClient( self::$url_vies );
}
/**
* Check if it's a valid vat number.
*/
public function checkVat ( $country, $number )
{
$response = array( 'is_valid' => false );
$vat = $this->prepareVat( $country, $number );
if ($vat)
{
$this->response = array( 'is_valid' =>$this->soap->checkVat( $vat )->valid );
}
return json_encode( $this->response );
}
/**
* Checks that there are all needed params ( Code Country and number );
*/
protected function prepareVat( $country, $number )
{
try
{
if ( empty( $country ) || empty( $number ) )
{
throw new Exception( "Both 'country' and 'number' params are mandatory" );
}
if ( !in_array( $country, self::$european_countries ) )
{
throw new Exception( "Invalid country" );
}
$vat = array(
'vatNumber' => $number,
'countryCode' => $country,
);
return $vat;
}
catch( Exception $e )
{
$this->response = array( 'error_message' => $e->getMessage() );
return false;
}
}
}
// API Call
$vies = new VatValidator();
if ($_GET['vat']) {
$vat = $_GET['vat'];
$country = substr($vat, 0, 2);
$number = substr($vat, 2);
} else {
$country = "";
$number = "";
}
$vies->checkVat( strtoupper( $country ), $number);
$response = json_encode( $vies->response);
echo $response;
?>
It looks like you edited your code samples in Microsoft Word. The angled quotes around “vat_ok” are called 'smart quotes' and are not acceptable substitutes for standard ASCII single and double quotes. That usually cause your code to be mis-interpreted.
ASKER
That snippet is in no way representative of anything I have written / tested and was just a poor code example I threw together in textwrangler. 10/10 for the spot but not quite the answer I was seeking as that code is incomplete hence why I am here
Sadly, I cant seem to edit the question body to correct the snippet
Sadly, I cant seem to edit the question body to correct the snippet
Just post a correct version then. With 'smart quotes', the code can't work.
ASKER
HI Dave, I appreciate you taking time to answer.. but to reiterate.. I have come to get assistance on how to get this to work and not how to correct a completely bogus sample.. which if I could edit the question, I would remove as it is becoming the focus of my request for assistance and it likely not even a suitable starting base for any function.
Push comes to shove, look like I am going to have to delete / close this question as there appears to be no way whatsoever to edit it which is very frustrating
Push comes to shove, look like I am going to have to delete / close this question as there appears to be no way whatsoever to edit it which is very frustrating
ASKER
heh heh, just fed the code into PHPStorm, you can imagine how many underlines and orange popped up
ok here is where I am at so far
ok here is where I am at so far
var searchRequest = null;
$(function () {
var minlength = 3;
$("#jform_company_vat_tmp").keyup(function () {
var that = this,
value = $(this).val();
if (value.length >= minlength ) {
if (searchRequest != null)
searchRequest.abort();
searchRequest = $.ajax({
type: "GET",
url: "(website)/vies.php",
data: {
'vat' : this
},
dataType: "text",
success: function(msg){
//we need to check if the value is the same
if (value==$(that).val()) {
document.getElementById("vat_ok").value = "1";
document.getElementById("vat_number_confirmed").value = $("#jform_company_vat_tmp").val()
$("#jform_company_vat_tmp").attr("disabled", true);
$("#vat-ok").show();
$("#vat-error").hide();
}
}
});
}
});
});
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Question has been abandoned, Points split for possible solutions