Unerwarteter Token-Doppelpunkt: Beheben von JSONP-Fehlern in jQuery.ajax#get
Beim Auftreten eines „Unerwarteter Token-Doppelpunkt“-Fehlers in jQuery.ajax #get, es ist wichtig, die Natur von JSONP-Anfragen (JSON with Padding) zu verstehen. Bei JSONP werden JSON-Daten an einen globalen JavaScript-Funktionsaufruf auf der Clientseite zurückgesendet.
Um JSONP zu unterstützen, muss der Server das „Padding“ in die Antwort einschließen. Das „Padding“ besteht aus einem Callback-Funktionsnamen, gefolgt von den in Klammern eingeschlossenen JSON-Daten:
jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})
In diesem Beispiel lautet der Name der Rückruffunktion jQuery111108398571682628244_1403193212453. Der Fehler tritt auf, weil JavaScript JSONP als JavaScript analysiert, wobei {...} auch Blöcke darstellt.
Um diesen Fehler zu beheben, muss der Server das „Padding“ in die Antwort aufnehmen. Darüber hinaus enthält jQuery normalerweise einen Rückruf-Abfragezeichenfolgenparameter mit dem Namen der Funktion. Um dies zu berücksichtigen, kann der Servercode eine bedingte Anweisung verwenden, um den Rückrufparameter zu überprüfen und die Antwort entsprechend zu senden:
var callback = req.query.callback; var data = JSON.stringify({ Name : "Tom", Description : "Hello it's me!" }); if (callback) { res.setHeader('Content-Type', 'text/javascript'); res.end(callback '(' data ')'); } else { res.setHeader('Content-Type', 'application/json'); res.end(data); }
Alternativ stellt ExpressJS eine res.jsonp()-Methode bereit, die diese Bedingung bereits verarbeitet, wodurch es einfacher wird, JSONP-Antworten zurückzugeben:
app.get( '/', function( req, res ) { console.log( 'req received' ); res.jsonp({ Name : "Tom", Description : "Hello it's me!" }); });
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3