Bonjour J'ai un soucis avec un code en ajax.
En fait il s'agit d'aller chercher des noms de ville et code psotal dans la base de donnée, pour cela j'ai deux input dont les id sont ville et cp
j'ai donc en header ce code ci:
[javascript]<script type="text/javascript" src="
http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="
http://ajax.microsoft.com/ajax/jquery.u ... "></script>
<script type="text/javascript">
var cache = {};
$(function ()
{
$("#cp, #ville").autocomplete({
source: function (request, response)
{
//Si la réponse est dans le cache
if (('FR' + '-' + request.term) in cache)
{
response($.map(cache['FR' + '-' + request.term], function (item)
{
return {
label: item.CodePostal + ", " + item.Ville,
value: function ()
{
if ($(this).attr('id') == 'cp')
{
$('#ville').val(item.Ville);
return item.CodePostal;
}
else
{
$('#cp').val(item.CodePostal);
return item.Ville;
}
}
}
}));
}
//Sinon -> Requete Ajax
else
{
var objData = {};
if ($(this.element).attr('id') == 'cp')
{
objData = { codePostal: request.term, pays: 'FR', maxRows: 10 };
}
else
{
objData = { ville: request.term, pays: 'FR', maxRows: 10 };
}
$.ajax({
url: "./AutoCompletion.php",
dataType: "json",
data: objData,
type: 'POST',
success: function (data)
{
//Ajout de reponse dans le cache
cache[('FR' + '-' + request.term)] = data;
response($.map(data, function (item)
{
return {
label: item.CodePostal + ", " + item.Ville,
value: function ()
{
if ($(this).attr('id') == 'cp')
{
$('#ville').val(item.Ville);
return item.CodePostal;
}
else
{
$('#cp').val(item.CodePostal);
return item.Ville;
}
}
}
}));
}
});
}
},
minLength: 3,
delay: 600
});
});
</script>[/javascript]
voila et donc pour la page qui traite ces informations; j'ai donc ceci:
<?php
require_once('./AutoCompletionCPVille.class.php');
//Initialisation de la liste
$list = array();
//Connexion MySQL
try
{
$db = new PDO('mysql:host=localhost;dbname=users', 'root', '');
}
catch (Exception $ex)
{
echo $ex->getMessage();
}
//Construction de la requete
$strQuery = "SELECT CP CodePostal, VILLE Ville FROM cp_autocomplete WHERE ";
if (isset($_POST["codePostal"]))
{
$strQuery .= "CP LIKE :codePostal ";
}
else
{
$strQuery .= "VILLE LIKE :ville ";
}
$strQuery .= "AND CODEPAYS = 'FR' ";
//Limite
if (isset($_POST["maxRows"]))
{
$strQuery .= "LIMIT 0, :maxRows";
}
$query = $db->prepare($strQuery);
if (isset($_POST["codePostal"]))
{
$value = $_POST["codePostal"]."%";
$query->bindParam(":codePostal", $value, PDO::PARAM_STR);
}
else
{
$value = $_POST["ville"]."%";
$query->bindParam(":ville", $value, PDO::PARAM_STR);
}
//Limite
if (isset($_POST["maxRows"]))
{
$valueRows = intval($_POST["maxRows"]);
$query->bindParam(":maxRows", $valueRows, PDO::PARAM_INT);
}
$query->execute();
$list = $query->fetchAll(PDO::FETCH_CLASS, "AutoCompletionCPVille");;
echo json_encode($list);
?>
et donc le soucis que j'ai c'est que j'ai plusieurs adresses avec les id cp ville, cp2 ville2 et cp3 ville3
j'ai donc adapté dans le javascript du header de la sorte:
[javascript]<script type="text/javascript">
var cache = {};
$(function ()
{
$("#cp2, #ville2").autocomplete({
source: function (request, response)
{
//Si la réponse est dans le cache
if (('FR' + '-' + request.term) in cache)
{
response($.map(cache['FR' + '-' + request.term], function (item)
{
return {
label: item.CodePostal + ", " + item.ville2,
value: function ()
{
if ($(this).attr('id') == 'cp2')
{
$('#ville2').val(item.ville2);
return item.CodePostal;
}
else
{
$('#cp2').val(item.CodePostal);
return item.ville2;
}
}
}
}));
}
//Sinon -> Requete Ajax
else
{
var objData = {};
if ($(this.element).attr('id') == 'cp2')
{
objData = { codePostal: request.term, pays: 'FR', maxRows: 10 };
}
else
{
objData = { ville2: request.term, pays: 'FR', maxRows: 10 };
}
$.ajax({
url: "./AutoCompletion.php",
dataType: "json",
data: objData,
type: 'POST',
success: function (data)
{
//Ajout de reponse dans le cache
cache[('FR' + '-' + request.term)] = data;
response($.map(data, function (item)
{
return {
label: item.CodePostal + ", " + item.ville2,
value: function ()
{
if ($(this).attr('id') == 'cp2')
{
$('#ville2').val(item.ville2);
return item.CodePostal;
}
else
{
$('#cp2').val(item.CodePostal);
return item.ville2;
}
}
}
}));
}
});
}
},
minLength: 3,
delay: 600
});
});
</script>[/javascript]
et jusqu'e la ça fonctionne pour les code postaux mais pour les villes il me dit undefined....
et pourtant je n'ai pas de messages d'erreur dans la console, du coup je ne vois pas d'ou cela peut provenir
j'estime aussi que mes bases en javascript ne me permettent pas de résoudre ce problème seul et mes recherches sont restées vaines jusque la.
Par avance merci pour votre aide.
Bonjour J'ai un soucis avec un code en ajax.
En fait il s'agit d'aller chercher des noms de ville et code psotal dans la base de donnée, pour cela j'ai deux input dont les id sont ville et cp
j'ai donc en header ce code ci:
[javascript]<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.ui/1.8.10/jquery-ui.js"></script>
<script type="text/javascript">
var cache = {};
$(function ()
{
$("#cp, #ville").autocomplete({
source: function (request, response)
{
//Si la réponse est dans le cache
if (('FR' + '-' + request.term) in cache)
{
response($.map(cache['FR' + '-' + request.term], function (item)
{
return {
label: item.CodePostal + ", " + item.Ville,
value: function ()
{
if ($(this).attr('id') == 'cp')
{
$('#ville').val(item.Ville);
return item.CodePostal;
}
else
{
$('#cp').val(item.CodePostal);
return item.Ville;
}
}
}
}));
}
//Sinon -> Requete Ajax
else
{
var objData = {};
if ($(this.element).attr('id') == 'cp')
{
objData = { codePostal: request.term, pays: 'FR', maxRows: 10 };
}
else
{
objData = { ville: request.term, pays: 'FR', maxRows: 10 };
}
$.ajax({
url: "./AutoCompletion.php",
dataType: "json",
data: objData,
type: 'POST',
success: function (data)
{
//Ajout de reponse dans le cache
cache[('FR' + '-' + request.term)] = data;
response($.map(data, function (item)
{
return {
label: item.CodePostal + ", " + item.Ville,
value: function ()
{
if ($(this).attr('id') == 'cp')
{
$('#ville').val(item.Ville);
return item.CodePostal;
}
else
{
$('#cp').val(item.CodePostal);
return item.Ville;
}
}
}
}));
}
});
}
},
minLength: 3,
delay: 600
});
});
</script>[/javascript]
voila et donc pour la page qui traite ces informations; j'ai donc ceci:
[php]<?php
require_once('./AutoCompletionCPVille.class.php');
//Initialisation de la liste
$list = array();
//Connexion MySQL
try
{
$db = new PDO('mysql:host=localhost;dbname=users', 'root', '');
}
catch (Exception $ex)
{
echo $ex->getMessage();
}
//Construction de la requete
$strQuery = "SELECT CP CodePostal, VILLE Ville FROM cp_autocomplete WHERE ";
if (isset($_POST["codePostal"]))
{
$strQuery .= "CP LIKE :codePostal ";
}
else
{
$strQuery .= "VILLE LIKE :ville ";
}
$strQuery .= "AND CODEPAYS = 'FR' ";
//Limite
if (isset($_POST["maxRows"]))
{
$strQuery .= "LIMIT 0, :maxRows";
}
$query = $db->prepare($strQuery);
if (isset($_POST["codePostal"]))
{
$value = $_POST["codePostal"]."%";
$query->bindParam(":codePostal", $value, PDO::PARAM_STR);
}
else
{
$value = $_POST["ville"]."%";
$query->bindParam(":ville", $value, PDO::PARAM_STR);
}
//Limite
if (isset($_POST["maxRows"]))
{
$valueRows = intval($_POST["maxRows"]);
$query->bindParam(":maxRows", $valueRows, PDO::PARAM_INT);
}
$query->execute();
$list = $query->fetchAll(PDO::FETCH_CLASS, "AutoCompletionCPVille");;
echo json_encode($list);
?>[/php]
et donc le soucis que j'ai c'est que j'ai plusieurs adresses avec les id cp ville, cp2 ville2 et cp3 ville3
j'ai donc adapté dans le javascript du header de la sorte:
[javascript]<script type="text/javascript">
var cache = {};
$(function ()
{
$("#cp2, #ville2").autocomplete({
source: function (request, response)
{
//Si la réponse est dans le cache
if (('FR' + '-' + request.term) in cache)
{
response($.map(cache['FR' + '-' + request.term], function (item)
{
return {
label: item.CodePostal + ", " + item.ville2,
value: function ()
{
if ($(this).attr('id') == 'cp2')
{
$('#ville2').val(item.ville2);
return item.CodePostal;
}
else
{
$('#cp2').val(item.CodePostal);
return item.ville2;
}
}
}
}));
}
//Sinon -> Requete Ajax
else
{
var objData = {};
if ($(this.element).attr('id') == 'cp2')
{
objData = { codePostal: request.term, pays: 'FR', maxRows: 10 };
}
else
{
objData = { ville2: request.term, pays: 'FR', maxRows: 10 };
}
$.ajax({
url: "./AutoCompletion.php",
dataType: "json",
data: objData,
type: 'POST',
success: function (data)
{
//Ajout de reponse dans le cache
cache[('FR' + '-' + request.term)] = data;
response($.map(data, function (item)
{
return {
label: item.CodePostal + ", " + item.ville2,
value: function ()
{
if ($(this).attr('id') == 'cp2')
{
$('#ville2').val(item.ville2);
return item.CodePostal;
}
else
{
$('#cp2').val(item.CodePostal);
return item.ville2;
}
}
}
}));
}
});
}
},
minLength: 3,
delay: 600
});
});
</script>[/javascript]
et jusqu'e la ça fonctionne pour les code postaux mais pour les villes il me dit undefined....
et pourtant je n'ai pas de messages d'erreur dans la console, du coup je ne vois pas d'ou cela peut provenir
j'estime aussi que mes bases en javascript ne me permettent pas de résoudre ce problème seul et mes recherches sont restées vaines jusque la.
Par avance merci pour votre aide.