it-swarm.com.de

jQuery $ .ajax-Anforderung von Datentyp json ruft keine Daten ab PHP Skript

Ich habe überall nach der Lösung gesucht, aber ich kann nichts finden, was funktioniert. Ich versuche, ein paar Daten aus der Datenbank zu holen und dann über AJAX Autocomplete-Eingabefelder in einem Formular. Dafür habe ich mich für json entschieden, warum nicht, oder? Alternativ habe ich darüber nachgedacht, einfach eine begrenzte Saite zurückzusenden und sie dann zu kennzeichnen, was im Nachhinein viel einfacher gewesen wäre und mir Kopfschmerzen erspart hätte ... Da ich mich jedoch für Json entschieden habe, denke ich sollte dabei bleiben und herausfinden, was schief gelaufen ist! Was passiert ist, wenn bei der Ausführung von get_member_function () ein Fehler in einem Alert-Dialog erscheint und "[object Object]" liest. Ich habe dies auch mit der GET-Anfrage versucht und den contentType auf "application/json" gesetzt. Zeichensatz = utf-8 ″. Leider keine Würfel. Kann jemand bitte vorschlagen, was ich falsch mache? Pass auf dich auf, Piotr.

Meine Javascript/jQuery-Funktion lautet wie folgt:

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

      }

   } );

}

und der entsprechende Code in "contents/php_scripts/admin_scripts.php" lautet wie folgt:

   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

Ich glaube ich kenne das ...

Versuchen Sie, Ihre JSON als JSON zu senden, indem Sie die Funktion header () von PHP verwenden:

/**
 * Send as JSON
 */
header("Content-Type: application/json", true);

Obwohl Sie gültige JSONs übergeben, glaubt das $ .ajax von jQuery nicht, weil der Header fehlt.

jQuery war früher ohne den Header in Ordnung, wurde aber vor ein paar Versionen geändert.

EBENFALLS

Stellen Sie sicher, dass Ihr Skript gültige JSON-Werte zurückgibt. Verwenden Sie Firebug oder Google Chrome Developer Tools , um die Antwort der Anforderung in der Konsole zu überprüfen.

UPDATE

Sie sollten auch Ihren Code aktualisieren, um $ _POST zu bereinigen, um SQL-Injection-Angriffe zu vermeiden. Sowie einige Fehler einfangen.

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

Versuchen Sie es mit jQuery.parseJSON, wenn Sie die Daten zurückbekommen.

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

Die Funktion $.ajaxerror akzeptiert drei Argumente, nicht eines:

error: function(xhr, status, thrown)

Sie müssen den zweiten und dritten Parameter ausgeben, um Ihre Ursache zu ermitteln, nicht die erste.

5
Alnitak

Versuchen Sie zusätzlich zu McHerbies Hinweis json_encode( $json_arr, JSON_FORCE_OBJECT );, wenn Sie sich in PHP 5.3 befinden ...

2
  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

Wenn Sie eine neuere Version (über 1.3.x) verwenden, sollten Sie mehr über die Funktion parseJSON erfahren! Ich habe das gleiche Problem erlebt. Verwenden Sie eine alte Version oder ändern Sie Ihren Code

success=function(data){
  //something like this
  jQuery.parseJSON(data)
}

Nun, es könnte jemandem helfen. Ich war dumm genug, um var_dump('testing'); in die Funktion zu setzen, von der ich JSON forderte, um sicher zu sein, dass die Anfrage tatsächlich empfangen wurde. Dies gilt natürlich auch als Teil der erwarteten json-Antwort, und wenn dataType auf json gesetzt ist, schlägt die Anforderung fehl.

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>