Question
J'ai un script de mise à jour d'une table de base de données. Je dois retourner un tableau de JSON et de mettre à jour des tables avec JQUERY.
mon script php:
$update = mysql_query("UPDATE PLD_SEARCHES SET STATUS = 1, TOTAL_RESULTS = ".$scrapper->getTotalResults().",RESULTS = $resultCounter WHERE ID = ".$searchId);
$output = array("status"=>"COMPLETED","results"=>$resultCounter,"totalResults"=>$scrapper->getTotalResults());
echo json_encode($output);
Code jquery:
$("button").live("click", function(event){
event.preventDefault();
$.getJSON("startsearch.php",{ searchId: $(this).val() }, function(data){
alert(data[0].status);
});
... le problème est que si j'utilise $.post("startsearch.php",{ searchId: $(this).val() }, function(data))
le script est exécuté et je reçois une alerte agréable avec une valeur non définie. si j'ajouter le paramètre « JSON » le script ne soit pas exécuté plus. J'ai essayé d'utiliser getJSON mais encore une fois le même problème.
Tout le monde a des idées? Je suis désespéré ... cela a été me casser les pieds pendant presque une semaine et je n'ai toujours pas réussi à le résoudre.
La solution
Dans votre fichier php assurez-vous de définir le type de contenu correct:
header("Content-type: application/json; charset=utf-8");
de telle sorte que jquery peut correctement eval
la réponse dans un objet JSON.
Autres conseils
Vous pouvez accéder à vos données de réponse comme suit:
alert(data.status);
alert(data.results);
alert(data.totalResults);
S'il vous plaît ne pas utiliser d'alerte, installez Firebug dans votre Firefox ou activer la console javascript Chrome ou Safari. après que vous pouvez utiliser console.log(data);
je suppose que les données ne sont pas un tableau. également un coup d'oeil à l'each () exmaple sur les jquery docs http: //docs.jquery. com / Ajax / jQuery.getJSON
Eh bien, je suis confiant json2.js
pour analyser les données JSON renvoyées de requête AJAX. Vous pouvez le télécharger à partir de http://json.org . Cette bibliothèque offre une meilleure façon d'analyser une chaîne, et lancer une exception si la piqûre est pas JSON.
J'écris toujours ma demande AJAX comme ceci:
$.post(URL,
{ PARAM },
function(data){
try {
var r = JSON.parse(data);
//this for your code above
alert (r.status); //should be 'COMPLETED'
}
catch (e) {
//data is not in json format, or there are another exception in try block
//do something about it
alert('Exception occured, please check the data!');
}
});
Lors du traitement de JSON, le tableau en php deviendra membre variable JSON. Donc, si dans votre php il est $output['status']
, puis en JSON, il sera r.status
.