Je cherchais partout la solution, mais je ne trouve rien qui fonctionne ..__J'essaie d'obtenir une série de données de la base de données, puis via AJAX des champs de saisie à remplissage automatique dans un formulaire. Pour ce faire, j'ai décidé d'utiliser JSON, car pourquoi pas, non? Sinon, je pensais simplement renvoyer une chaîne délimitée, puis la marquer, ce qui aurait été beaucoup plus facile en arrière-plan et m'aurait évité le mal de tête ... Depuis que j'ai décidé d'utiliser JSON, devrait rester avec elle et savoir ce qui a mal tourné! Ce qui se produit, c’est que lorsque la fonction get_member_function () est exécutée, une erreur s’affiche dans un dialogue d’alerte et lit "[objet Objet]". J'ai également essayé d'utiliser la requête GET et de définir contentType sur "application/json"; jeu de caractères = utf-8 ". Hélas, pas de dés. Quelqu'un peut-il s'il vous plaît suggérer ce que je fais mal? Prends soin de toi, Piotr.
Ma fonction javascript/jQuery est la suivante:
function get_member_info()
{
var url = "contents/php_scripts/admin_scripts.php";
var id = $( "select[ name = member ] option:selected" ).val();
$.ajax(
{
type: "POST",
dataType: "json",
url: url,
data: { get_member: id },
success: function( response )
{
$( "input[ name = type ]:eq( " + response.type + " )" ).attr( "checked", "checked" );
$( "input[ name = name ]" ).val( response.name );
$( "input[ name = fname ]" ).val( response.fname );
$( "input[ name = lname ]" ).val( response.lname );
$( "input[ name = email ]" ).val( response.email );
$( "input[ name = phone ]" ).val( response.phone );
$( "input[ name = website ]" ).val( response.website );
$( "#admin_member_img" ).attr( "src", "images/member_images/" + response.image );
},
error: function( error )
{
alert( error );
}
} );
}
et le code correspondant dans "contenus/php_scripts/admin_scripts.php" est le suivant:
if( isset( $_POST[ "get_member" ] ) )
{
$member_id = $_POST[ "get_member" ];
$query = "select * from members where id = '$member_id'";
$result = mysql_query( $query );
$row = mysql_fetch_array( $result );
$type = $row[ "type" ];
$name = $row[ "name" ];
$fname = $row[ "fname" ];
$lname = $row[ "lname" ];
$email = $row[ "email" ];
$phone = $row[ "phone" ];
$website = $row[ "website" ];
$image = $row[ "image" ];
$json_arr = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image );
echo json_encode( $json_arr );
}
Je pense que je connais celui-ci ...
Essayez d’envoyer votre JSON en tant que JSON en utilisant la fonction header () function de PHP:
/**
* Send as JSON
*/
header("Content-Type: application/json", true);
Bien que vous transmettiez un JSON valide, $ .ajax de jQuery ne le pense pas car il manque l'en-tête.
jQuery fonctionnait sans l'en-tête, mais il y a quelques modifications.
ÉGALEMENT
Assurez-vous que votre script renvoie un code JSON valide. Utilisez Firebug ou Outils de développement de Google Chrome pour vérifier la réponse de la demande dans la console.
METTRE À JOUR
Vous voudrez également mettre à jour votre code pour assainir le $ _POST afin d'éviter les attaques par injection SQL. En plus de fournir des erreurs de capture.
if (isset($_POST['get_member'])) {
$member_id = mysql_real_escape_string ($_POST["get_member"]);
$query = "SELECT * FROM `members` WHERE `id` = '" . $member_id . "';";
if ($result = mysql_query( $query )) {
$row = mysql_fetch_array($result);
$type = $row['type'];
$name = $row['name'];
$fname = $row['fname'];
$lname = $row['lname'];
$email = $row['email'];
$phone = $row['phone'];
$website = $row['website'];
$image = $row['image'];
/* JSON Row */
$json = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image );
} else {
/* Your Query Failed, use mysql_error to report why */
$json = array('error' => 'MySQL Query Error');
}
/* Send as JSON */
header("Content-Type: application/json", true);
/* Return JSON */
echo json_encode($json);
/* Stop Execution */
exit;
}
Essayez d’utiliser jQuery.parseJSON lorsque vous récupérez les données.
type: "POST",
dataType: "json",
url: url,
data: { get_member: id },
success: function(data) {
response = jQuery.parseJSON(data);
$("input[ name = type ]:eq(" + response.type + " )")
.attr("checked", "checked");
$("input[ name = name ]").val( response.name);
$("input[ name = fname ]").val( response.fname);
$("input[ name = lname ]").val( response.lname);
$("input[ name = email ]").val( response.email);
$("input[ name = phone ]").val( response.phone);
$("input[ name = website ]").val( response.website);
$("#admin_member_img")
.attr("src", "images/member_images/" + response.image);
},
error: function(error) {
alert(error);
}
La fonction $.ajax
error
prend trois arguments, pas un:
error: function(xhr, status, thrown)
Vous devez vider les 2ème et 3ème paramètres pour trouver votre cause, pas le premier.
En plus de la note de McHerbie, essayez json_encode( $json_arr, JSON_FORCE_OBJECT );
si vous êtes sur PHP 5.3 ...
session_start();
include('connection.php');
/* function msg($subjectname,$coursename,$sem)
{
return '{"subjectname":'.$subjectname.'"coursename":'.$coursename.'"sem":'.$sem.'}';
}*/
$title_id=$_POST['title_id'];
$result=mysql_query("SELECT * FROM `video` WHERE id='$title_id'") or die(mysql_error());
$qr=mysql_fetch_array($result);
$subject=$qr['subject'];
$course=$qr['course'];
$resultes=mysql_query("SELECT * FROM course JOIN subject ON course.id='$course' AND subject.id='$subject'");
$qqr=mysql_fetch_array($resultes);
$subjectname=$qqr['subjectname'];
$coursename=$qqr['coursename'];
$sem=$qqr['sem'];
$json = array("subjectname" => $subjectname, "coursename" => $coursename, "sem" => $sem,);
header("Content-Type: application/json", true);
echo json_encode( $json_arr );
$.ajax({type:"POST",
dataType: "json",
url:'select-title.php',
data:$('#studey-form').serialize(),
contentType: "application/json; charset=utf-8",
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
success:function(response)
{
var response=$.parseJSON(response)
alert(response.subjectname);
$('#course').html("<option>"+response.coursename+"</option>");
$('#subject').html("<option>"+response.subjectname+"</option>");
},
error: function( error,x,y)
{
alert( x,y );
}
});
Si vous utilisez une version plus récente (plus de 1.3.x), vous devriez en apprendre plus sur la fonction parseJSON! J'ai rencontré le même problème. Utilisez une ancienne version ou changez votre code
success=function(data){
//something like this
jQuery.parseJSON(data)
}
Cela pourrait aider quelqu'un. J'ai été assez stupide pour insérer var_dump('testing');
dans la fonction pour laquelle je demandais JSON afin de m'assurer que la demande avait bien été reçue. Cela fait évidemment aussi référence à la réponse json
attendue, et avec dataType
défini sur json
, la demande échoue.
Try this...
<script type="text/javascript">
$(document).ready(function(){
$("#find").click(function(){
var username = $("#username").val();
$.ajax({
type: 'POST',
dataType: 'json',
url: 'includes/find.php',
data: 'username='+username,
success: function( data ) {
//in data you result will be available...
response = jQuery.parseJSON(data);
//further code..
},
error: function(xhr, status, error) {
alert(status);
},
dataType: 'text'
});
});
});
</script>
<form name="Find User" id="userform" class="invoform" method="post" />
<div id ="userdiv">
<p>Name (Lastname, firstname):</p>
</label>
<input type="text" name="username" id="username" class="inputfield" />
<input type="button" name="find" id="find" class="passwordsubmit" value="find" />
</div>
</form>
<div id="userinfo"><b>info will be listed here.</b></div>