web-dev-qa-db-fra.com

la requête jQuery $ .ajax de dataType json ne récupérera pas les données de PHP scénario

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 );

   }
15
Piotr

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;

}
24
McHerbie

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);
}
9
Peter

La fonction $.ajaxerror 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.

5
Alnitak

En plus de la note de McHerbie, essayez json_encode( $json_arr, JSON_FORCE_OBJECT ); si vous êtes sur PHP 5.3 ...

2
Shahriyar Imanov
  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 );

              }
                   });
1
nishant

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)
}
0

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.

0
Tim
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>
0