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 );
}
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;
}
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);
}
Die Funktion $.ajax
error
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.
Versuchen Sie zusätzlich zu McHerbies Hinweis json_encode( $json_arr, JSON_FORCE_OBJECT );
, wenn Sie sich in PHP 5.3 befinden ...
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 );
}
});
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.
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>