Uncaught SyntaxError: Onverwacht token:

Ik voer een AJAX-aanroep uit in mijn MooTools-script, dit werkt prima in Firefox, maar in Chrome krijg ik een Uncaught SyntaxError: Unexpected token :error, ik kan niet bepalen waarom. Het commentaar geven op code om te bepalen waar de slechte code is, levert niets op, ik denk dat het een probleem kan zijn met de JSON die wordt geretourneerd. Bij het inchecken in de console zie ik de geretourneerde JSON:

{"votes":47,"totalvotes":90}

Ik zie er geen problemen in, waarom zou deze fout optreden?

vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });
  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});

Antwoord 1, autoriteit 100%

Ik zie rode fouten

Uncaught SyntaxError: Onverwacht token <

op het consoletabblad van uw Chrome-ontwikkelaar is een indicatie van HTML in de hoofdtekst van de reactie.

Wat u feitelijk ziet, is de reactie van uw browser op de onverwachte bovenste regel <!DOCTYPE html>van de server.


Antwoord 2, autoriteit 69%

Gewoon een FYI voor mensen die hetzelfde probleem zouden kunnen hebben — ik moest gewoon mijn server de JSON terugsturen als applicatie/json en de standaard jQuery-handler werkte prima.


Antwoord 3, autoriteit 35%

Dit is mij zojuist overkomen en de reden was geen van de bovenstaande redenen. Ik gebruikte de jQuery-opdracht getJSON en voegde callback=?toe om JSONP te gebruiken (omdat ik domeinoverschrijdend moest gaan) en retourneerde de JSON-code {"foo":"bar"}en krijg de fout.

Dit komt omdat ik de callback-gegevens had moeten opnemen, zoiets als jQuery17209314005577471107_1335958194322({"foo":"bar"})

Hier is de PHP-code die ik heb gebruikt om dit te bereiken, die degradeert als JSON (zonder terugbellen) wordt gebruikt:

$ret['foo'] = "bar";
finish();
function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

Hopelijk helpt dat iemand in de toekomst.


Antwoord 4, autoriteit 15%

Ik heb zojuist het probleem opgelost. Er was iets dat problemen veroorzaakte met een standaard Request-oproep, dus dit is de code die ik in plaats daarvan heb gebruikt:

vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});

Als iemand weet waarom het standaard Request-object me problemen gaf, zou ik dat graag willen weten.


Antwoord 5, autoriteit 8%

Ik dacht dat ik mijn probleem en oplossing aan de lijst zou toevoegen.

Ik kreeg: Uncaught SyntaxError: Unexpected token <en de fout wees naar deze regel in mijn ajax-succesverklaring:

var total = $.parseJSON(response);

Later ontdekte ik dat er naast de json-resultaten ook HTML werd meegestuurd met het antwoord, omdat ik een fout had in mijn PHP. Als je een foutmelding krijgt in PHP, kun je deze instellen om je te waarschuwen met enorme oranje tabellen en die tabellen waren de oorzaak van de JSON.

Ik ontdekte dat door gewoon een console.log(response)te doen om te zien wat er daadwerkelijk werd verzonden. Als het een probleem is met de JSON-gegevens, probeer dan eens of je een console.log of een andere verklaring kunt doen waarmee je kunt zien wat er wordt verzonden en wat er wordt ontvangen.


Antwoord 6, autoriteit 7%

Wanneer u uw JSON-bestand aanvraagt, retourneert de server JavaScript Content-Type-header (text/javascript) in plaats van JSON (application/json).

Volgens MooTools-documenten:

Reacties met javascript-inhoudstype worden automatisch geëvalueerd.

Als resultaat probeert MooTools uw JSON te evalueren als JavaScript, en wanneer u een dergelijke JSON probeert te evalueren:

{"votes":47,"totalvotes":90}

als JavaScript behandelt parser {en }als een blokbereik in plaats van objectnotatie. Het is hetzelfde als het evalueren van de volgende “code”:

"votes":47,"totalvotes":90

Zoals je kunt zien, is :daar totaal onverwacht.

De oplossing is om de juiste Content-Typeheader in te stellen voor het JSON-bestand. Als je het opslaat met de extensie .json, zou je server het zelf moeten doen.


Antwoord 7, autoriteit 3%

Het klinkt alsof je reactie op de een of andere manier wordt geëvalueerd. Dit geeft dezelfde fout in Chrome:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

Dit komt doordat de accolades ‘{…}’ door javascript worden geïnterpreteerd als een codeblok en niet als een letterlijk object zoals je zou verwachten.

Ik zou naar de JSON.decode()-functie kijken en kijken of daar een evaluatie in zit.

Soortgelijk probleem hier:
Eval() = Onverwachte token: fout


Antwoord 8, autoriteit 2%

Als niets logisch is, kan deze fout ook worden veroorzaakt door een PHP-fout die is ingesloten in html/javascript, zoals die hieronder

<br />
<b>Deprecated</b>:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

Niet de <br />enz. in de code die door PHP in html is ingevoegd, veroorzaakt de fout. Om dit soort fouten op te lossen (waarschuwing onderdrukken), gebruikt u deze code in het begin

error_reporting(E_ERROR | E_PARSE);

Om deze te bekijken, klik met de rechtermuisknop op de pagina, “bekijk bron” en onderzoek vervolgens de volledige html om deze fout op te sporen.


Antwoord 9

Uncaught SyntaxError: Unexpected token” verschijnt fout wanneer uw gegevens de verkeerde json-indeling retourneren, in sommige gevallen weet u niet dat u de verkeerde json-indeling heeft.
controleer het met alert(); functie

onSuccess : function(resp){  
   alert(resp);  
}

uw ontvangen bericht moet zijn: {“firstName”:”John”, “lastName”:”Doe”}
en dan kun je onderstaande code gebruiken

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

zonder fout “Uncaught SyntaxError: Unexpected token
maar als je het verkeerde json-formaat krijgt
bijv:

…{“firstName”:”John”, “lastName”:”Doe”}

of

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

zodat u een verkeerd json-formaat hebt, moet u dit oplossen voordat u JSON.decode of JSON.parse gebruikt


Antwoord 10

Dit is mij vandaag ook overkomen. Ik gebruikte EF en stuurde een entiteit terug als reactie op een AJAX-oproep. De virtuele eigenschappen van mijn entiteit veroorzaakten een cyclische afhankelijkheidsfout die niet werd gedetecteerd op de server. Door het [ScriptIgnore]-kenmerk toe te voegen aan de virtuele eigenschappen, werd het probleem opgelost.

In plaats van het kenmerk ScriptIgnore te gebruiken, is het waarschijnlijk beter om gewoon een DTO te retourneren.


Antwoord 11

Dit gebeurde omdat ik een regelconfiguratie heb in mijn express-server om elke 404 terug te sturen naar /#plus wat het oorspronkelijke verzoek ook was. Toestaan ​​dat de hoekige router/js het verzoek afhandelt. Als er geen js-route is om dat pad af te handelen, wordt er een verzoek aan de server gedaan naar /#/whatever, wat slechts een verzoek is voor /, de hele webpagina.

Dus als ik bijvoorbeeld een verzoek wil indienen voor /correct/somejsfile.jsmaar ik heb het verkeerd getypt in /wrong/somejsfile.js, dan wordt het verzoek gedaan naar de server. Die locatie/het bestand bestaat niet, dus de server reageert met een 302 location: /#/wrong/somejsfile.js. De browser volgt de omleiding graag en de hele webpagina wordt geretourneerd. De browser analyseert de pagina als js en je krijgt

Uncaught SyntaxError: Onverwacht token <

Dus om het aanstootgevende pad/verzoek te helpen vinden, zoekt u naar 302 verzoeken.

Ik hoop dat dat iemand helpt.


Antwoord 12

Ik had hetzelfde probleem en het bleek dat de Json terugkwam van de server
was niet geldig Json-P. Als je de oproep niet als een crossdomain-oproep gebruikt, gebruik dan gewone Json.


Antwoord 13

Mijn fout was enkele/dubbele aanhalingstekens vergetenrond url in javascript:

dus verkeerdecode was:

window.location = https://google.com;

en juistecode:

window.location = "https://google.com";

Antwoord 14

Ik kreeg een “SyntaxError: Unexpected token I” toen ik jQuery.getJSON()gebruikte om te proberen een floating point-waarde van Infinity, gecodeerd als INF, wat illegaal is in JSON.


Antwoord 15

In mijn geval kwam ik dezelfde fout tegen tijdens het uitvoeren van de lente mvc-toepassing vanwege een verkeerde toewijzing in mijn mvc-controller

@RequestMapping(name="/private/updatestatus")

ik heb de bovenstaande toewijzing gewijzigd in

@RequestMapping("/private/updatestatus")

of

@RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)

Antwoord 16

Bij mij ging het lampje branden toen ik de bron van de pagina in de Chrome-browser bekeek. Ik had een extra haakje in een if-statement. Je ziet meteen de rode cirkel met een kruis erin op de falende lijn. Het is een nogal nutteloze foutmelding, omdat het token Uncaught Syntax Error: Unexpected geen verwijzing naar een regelnummer maakt wanneer het voor het eerst in de console van Chrome verschijnt.


Antwoord 17

Ik heb hierin fout gedaan

  `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

Ik heb de variabele fsal geïnitialiseerd. Maar nogmaals, ik heb varin de tweede regel gezet. Deze geeft ook dat soort fouten…


Antwoord 18

Voor degenen die dit ervaren in AngularJs 1.4.6 of iets dergelijks, mijn probleem was dat angular mijn sjabloon niet kon vinden omdat het bestand op de templateUrl(pad) dat ik had opgegeven niet kon worden gevonden. Ik hoefde alleen maar een bereikbaar pad aan te geven en het probleem was weg.


Antwoord 19

In mijn geval was het een verkeerde url (niet bestaande), dus misschien moet je ‘send’ in de tweede regel anders zijn…


Antwoord 20

Deze fout kan ook betekenen dat er een colonof :ontbreekt in uw code.


Antwoord 21

In mijn geval werd het probleem opgelost door /aan het begin van de srcvan scripts of hrefvan stylesheets te plaatsen.


Antwoord 22

Uncaught SyntaxError: Unexpected token }

Chrome gaf me de fout voor deze voorbeeldcode:

<div class="file-square" onclick="window.location = " ?dir=zzz">
    <div class="square-icon"></div>
    <div class="square-text">zzz</div>
</div>

en loste het op door de onclick te fixeren om ‘like’ te zijn

... onclick="window.location = '?dir=zzz'" ...

Maar de fout heeft niets te maken met het probleem..

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes