json retourneert foutmelding: SyntaxError: JSON.parse: unexpected character
Ik ben op dit moment bezig om een simpel stukje te maken die een array met waarden ophaalt die JS vervolgens weer kan gebruiken om UI elementen mee te vullen. Ik maak de aanroep met ajax naar een php bestand die vervolgens de query uitvoert. Nu worden alle waarden goed opgehaald en er komen ook de juiste gegevens uit (dit had ik al eerder gechecked door te
Vervolgens maak ik van deze array een json string door gebruik te maken van json_encode
Dit retourneer ik vervolgens met.
Nu wordt de string goed teruggestuurd (met firebug nagekeken) maar toch geeft mijn jquery ajax de melding:
SyntaxError: JSON.parse: unexpected character, als ik in firebug kijk zie ik gewoon dat de json correct wordt geretoerneerd alsvolgt:
Dus voor zover ik kan zien moet deze json string gewoon valide zijn. Heeft iemand enig idee waar dit aan kan ligen? Ik heb al meerdere keren dit soort stukjes gemaakt en dat werkte altijd maar nu krijg ik ineens deze rare melding en ik heb echt geen idee waar dit aan ligt.
Heeft iemand enige suggesties waar ik moet zoeken? (Als ik meer code moet posten zal ik dat doen maar alle php doet wat ie moet doen en er is eigenlijk niet zo heel veel spannends aan)
Gewijzigd op 23/05/2013 16:10:46 door Ama saril
Optie 2: welke jquery functie gebruikt je om de ajax call te maken. Ik heb in het verleden enorm veel problemen gehad met de $.post() fucntie die om de een of andere manier nooit de json goed kon vertalen. Het zelf handmatig doen bleek de oplossing.
Ik heb even jouw opties getst.
Optie1: Ik heb hem in de browser gestart en hij geeft de string correct weer (heb ook gecontroleerd op spaties ervoor of erachter en dergelijke)
De jquery functie die ik gebruik is $.ajax
Ik heb deze altijd gebruik heb dan ook mijn oude code simpelweg hergebruikt omdat het altijd werkte.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
function getCats()
{
var getString = "functie=haalCats&key=abc&gebruikersnaam=cde";
$.ajax(
{
type: "GET",
data: getString,
url: "./data/mainUi.php",
dataType: "json",
success: function(data)
{
//var gegevens = data;
alert('succes');
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('fout');
alert(jqXHR);
alert(textStatus);
alert(errorThrown);
}
});
}
?>
function getCats()
{
var getString = "functie=haalCats&key=abc&gebruikersnaam=cde";
$.ajax(
{
type: "GET",
data: getString,
url: "./data/mainUi.php",
dataType: "json",
success: function(data)
{
//var gegevens = data;
alert('succes');
},
error: function(jqXHR, textStatus, errorThrown)
{
alert('fout');
alert(jqXHR);
alert(textStatus);
alert(errorThrown);
}
});
}
?>
Zo ziet mijn call eruit. Ik heb dit al heel vaak gebruikt maar het is voor het eerst dat ie problemen heeft.
Probeer ook eens de handmatige optie. Dus geef geen json als datatype mee maar text en converteer de data dan zelf via de $.parseJSON() functie. Dit zou geen bal moeten uitmaken.... maar was voor mij in het verleden de enige mogelijkheid om het correct door te krijgen.
Totslot, je kan ook gebruik proberen te maken van de functie $.getJSON(). Hoewel dit in feite ook weer hetzelfde is als wat je doet. Vreemde is echter dat soms de ene methode wel werkt en de andere niet.
["variatiea","variatiec","variatiee","variatieg","variatiei","variatiek"]
Ik zal jou suggestie even proberen door txt te gebruiken als ik thuis ben, ik laat morgen wel weten hoe het is gelopen. Alvast bedankt.
Gewijzigd op 23/05/2013 17:02:50 door ama saril
Voordat ik het vergeet. Ik was de volgende dag naar huis gegaan en toen ik weer terug was opnieuw geprobeerd. Om een hele vreemde reden deed ie het nu ineens wel. Heb geen idee waar het aan kan liggen. In ieder geval bedankt voor de suggesties :)
http://json.parser.online.fr/ je string laten uitlezen.
Of je gebruikt Firebug waarin de JSON uitgelezen wordt in de console.
Mocht je ooit twijfelen aan je JSON-string, dan kan je op bijvoorbeeld Of je gebruikt Firebug waarin de JSON uitgelezen wordt in de console.