• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

AJAX Request mit jQuery

Barcardi

New member
Hallo,

ich bin neu in jQuery und wollt einen Ajax request machen was auch klappt also der Request wird gesendet aber als Antwort kommt irgendwie nichts. Hier mal der Quellcode:

js datei:

Code:
$(document).ready(function() {
	
	$.get("getchat.php", { id: $("#chat_id").val(), lastmsg: lastMessage }, function(data) {
		//alert(data.chat.message[lastMessage].username);
		//$("#chat_output_layer").append(data.chat.message[lastMessage].username);
		alert(data.chat.message.length);
	});

});

getchat.php
PHP:
<?php
session_start();
include('mysql_connection.php');

// send chat

if(isset($_POST['message']) && $_POST['message'] != "") {
	$timestamp = time();
	mysql_query("INSERT INTO chat_log (user_id, chat_id, timestamp, message) VALUES ('$_SESSION[user_id]', '$_POST[id]', '$timestamp', '$_POST[message]')");
}


// get chat
$lastmsg = $_GET['lastmsg'];

$query_msg = mysql_query("SELECT * FROM chat_log WHERE message_id > '$lastmsg' AND chat_id = '$_GET[id]' ORDER BY message_id");

$json = '{ "chat": {';

$num = mysql_num_rows($query_msg);

if($num > 0) {
	$json .= '"message": [';
	while($object = mysql_fetch_object($query_msg)) {
		//user tabelle
		$user_query = mysql_query("SELECT * FROM user WHERE id = '$object->user_id'");
		$user_object = mysql_fetch_object($user_query);
		
		$getdate = date("H:i", $object->timestamp);
		
		$json .= '{ "id": "'.$object->message_id.'",
		"timestamp": "'.$getdate.'",
			"username": "'.htmlspecialchars($user_object->username).'",
				"message": "'.htmlspecialchars($object->message).'"
				},';
	}
	$json .= ']';
} else {
	$json .= '"message": []';	
}
$json .= '}}';
echo $json;
?>

Sollte ich eigentlich jQuery benutzen? Da ich mich mit normalen JavaScript besser auskenne und mit deren Syntax.
 
da steht bzw. stand data.chat undefined, hab jetzt "json" als parameter dazugeben dann kommt keine Fehlermeldung und auch kein Text.

Code:
$.get("getchat.php", { id: $("#chat_id").val(), lastmsg: lastMessage }, function(data) {
		$("#chat_output_layer").append("<div>"+data.chat.message[lastMessage].username+"</div>")
	}, "json");

Wenn ich aber nur data ausgeben lasse kommt das ganze JSON objekt aber halt in JSON geschrieben und nicht sortiert.
 
Das klingt für mich so, als ob in deinem JSON irgendwas nicht ganz i.O. wäre. Benutze doch json_encode() im PHP - da bekommst du auf jeden Fall mal valides JSON am Ende raus.
 
Wo muss ich das json_encode einbauen? Also klar in der PHP Datei aber soll ich das dann so machen echo json_encode($json);
oder was? Kenne mich mit JSON mit AJAX nicht so gut aus, hab ja die getchat.php da oben schon gepostet. Also wie mach ich das?

mfg
 
PHP:
<?php
session_start();
include('mysql_connection.php');

// send chat

if(isset($_POST['message']) && $_POST['message'] != "") {
	$timestamp = time();
	mysql_query("INSERT INTO chat_log (user_id, chat_id, timestamp, message) VALUES ('$_SESSION[user_id]', '$_POST[id]', '$timestamp', '$_POST[message]')");
}


// get chat
$lastmsg = $_GET['lastmsg'];

$query_msg = mysql_query("SELECT * FROM chat_log WHERE message_id > '$lastmsg' AND chat_id = '$_GET[id]' ORDER BY message_id");

/*$json = '{ "chat": {';

$num = mysql_num_rows($query_msg);

if($num > 0) {
	$json .= '"message": [';
	while($object = mysql_fetch_object($query_msg)) {
		//user tabelle
		$user_query = mysql_query("SELECT * FROM user WHERE id = '$object->user_id'");
		$user_object = mysql_fetch_object($user_query);
		
		$getdate = date("H:i", $object->timestamp);
		
		$json .= '{ "id": "'.$object->message_id.'",
		"timestamp": "'.$getdate.'",
			"username": "'.htmlspecialchars($user_object->username).'",
				"message": "'.htmlspecialchars($object->message).'"
				},';
	}
	$json .= ']';
} else {
	$json .= '"message": []';	
}
$json .= '}}';*/
echo json_encode(mysql_fetch_array($query_msg, MYSQL_ASSOC));
?>

habs jetzt mal mit echo json_encode(mysql_fetch_array($query_msg, MYSQL_ASSOC)); augerufen, funktioniert es auch nicht.

Edit: Moment
 
Zuletzt bearbeitet:
Code:
$i = 0;

$test = array();
while($object = mysql_fetch_array($query_msg, MYSQL_ASSOC)) {
	$test["message"][$i] = $object["message"];
	$i++;
}
echo json_encode($test);

So, nun klappt es zwar aber ich bekomme die JSON ausgabe in etwa so:

{"message": ["blabal", "babl"] };
aber es sollte so sein:

{"messages":
var message = [{
"message": "test"
},
"message": "json"
}]
};
u.s.w.
 
aber es sollte so sein:

{"messages":
var message = [{
"message": "test"
},
"message": "json"
}]
};
Das ist kein gültiger JSON-String.
JSON sorgt dafür, dass eine Datenstruktur aus z.B. PHP 1:1 nach z.B. Javascript übertragen werden kann. Wenn das Format Dir also nicht gefällt, heißt das die PHP-Datenstruktur gefällt Dir nicht. Da Du die PHP Datei von Hand aufrufen kannst, hast Du einen prima Testcase, mit dem Du die Ausgabe und das Format optimieren kannst, damit es so aussieht, wie Du möchtest, und die PHP Funktion zum Generieren des JSON-Strings sorgt dafür, dass Du bei der Konvertiertung zur Zeichenkette keinen Murks bekommst.
 
Lohnt es sicher überhaupt einen Webchat mit AJAX, PHP & MySQL zu entwickeln? Hab ja gehört es soll den Server bzw. den Client sehr stark belasten bei einer bestimmten Anzahl von Usern.

Was wäre die Alternative? Flash? Java?
 
Zurück
Oben