Ik probeer al een tijdje ajax te laten werken in combinatie met json_encode. Ik heb inmiddels al alles geprobeerd maar heb nu een voorbeeld dat volgens mij wel zou moeten werken. Als ik het zonder json doe werkt het wel, heeft iemand een idee hoe dit zou kunnen komen?
Hier de code van het voorbeeld:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Naamloos document</title>
<?php
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
$array = array('test' => '<p>hier een teststring</p>');
header('Content-type: application/json');
echo json_encode($array);
//echo 'hier een test string'; dit werkt wel
exit();
}
?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(e) {
$('.menu').click(function(e){
e.preventDefault();
$.ajax({
type: "GET",
dataType:"json",
url:"http://localhost/cms/ajax.php",
success: function(data){
var json = $.parseJSON(data);
alert(data.test);
},
error: function(data){
var json = $.parseJSON(data);
alert(json.error);
},
});
});
});
</script>
</head>
<body>
<a href="test" class="menu">Paginabeheer</a>
</body>
</html>
Dit is niet ajax icm json, dit is json midden in een pagina echoen. Dat kan natuurlijk niet. De browser krijgt dan eerst een berg html om zijn oren, dan een header (die overigens al nooit meer verstuurd wordt) en dan een json encoded array.
Als je json wilt versturen mag je ALEEN EN DAN OOK ECHT ALLEEN json versturen. Geen html, geen xml, geen strings, NIETS anders.
(alleen de juiste headers van te voren natuurlijk wel)
Als het goed is wordt er in dit voorbeeld juist geen onnodige HTML etc getoond? Met json_encode() wordt de string in de array netjes omgezet in een JSON-string.
Ik weet even niet wanneer die voorwaarde precies voldoet, maar het lijkt me verder toch wel goed?
@Erwin
Ik heb hier ook aan zitten denken, maar ik had eerst php en html gescheiden dat werkte ook niet. Als ik het zo
doe zou het dan wel moeten werken(het werkt niet...):
<?php
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
echo json_encode(array('test' => '<p>hier een teststring</p>'));
//echo 'hier een test string'; dit werkt wel
exit();
}
?>
En dan hieronder de rest, normaal gesproken staat de php code natuurlijk in een apart bestand.
Ik heb verder so'n beetje alles geprobeerd/getest wat ik kon bedenken......
De code die ik als laatst had neergezet staat bovenaan, daaronder heb ik de rest gezet. Ik zit zelf misschien te denken dat het probleem licht bij xampp. Ik had ook het probleem dat de gd library niet werkte terwijl in de php info stond dat dat wel zou moeten. Ik heb dit wel getest op 2 computers maar beide met xampp.
Ik ga zo even testen op een online testsite.
[size=xsmall]Toevoeging op 23/02/2013 18:39:25:[/size]
Werkt online ook niet, doe kennelijk toch iets niet goed...
Ja dat kan, maar dat werkt ook niet in combinatie met json.
Overigens nog een heel klein vraagje(als het geen simpel antwoord is zal ik een nieuw topic starten):
Ik had me router klasse aangepast met ingestelde paden zodat ik met nette urls kan werken maar moet nu het hele pad gebruiken zoals www.test.nl/pagina1. Als ik als link doe /pagina1 komt er elke keer wat meer achter /test/pagina2/pagina3 etc. Hoe los je dit op?