2016-05-13 11 views
9

Wenn ich die Fetch-API verwende, um JSON von einer REST-API auf meinem lokalen Server abzurufen und die Antwort mit response.json() zu analysieren, erhalte ich eine unexpected end of input Error.Fetch-API - mit response.json() löst ein unerwartetes Ende des Eingabefehlers

Der Fehler ist leicht reproduzierbar auf meinem lokalen Server mit dem folgenden Einzeiler:

fetch(new Request('http://localhost:9950/RestService/v2/search/find/1', {mode: 'no-cors'})).then(function(response) { response.json(); }); 

// Output from Chrome console: 
// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined} 
// VM424:1 Uncaught (in promise) SyntaxError: Unexpected end of input 
//  at SyntaxError (native) 
//  at <anonymous>:1:128 

Wenn ich auf die Registerkarte Netzwerk zu sehen, kann ich sehen, dass meine Anfrage vom Server erfüllt wurde, und wenn ich eine Vorschau Die Antwort Ich kann sehen, dass dort gültiges JSON verfügbar ist (ich habe das durch Kopieren und Einfügen des JSON von der Registerkarte "Netzwerkantwort" in "jsonlint.com" überprüft). Hier ist ein Beispiel der Antwort, die ich bin vom Server bekommen:

{ 
    "SearchMatches": [{ 
     "Extracts": ["<b>1<\/b>.txt...", "<b>1<\/b>"], 
     "Title": "1.txt", 
     "Url": "C:\\TestShare4\\500Docs\\1.txt" 
    }] 
} 

Wenn ich versuche, response.text() zu verwenden, anstatt response.json() ich einen leeren String zu bekommen.

Irgendwelche Gedanken darüber, wo ich damit falsch liegen könnte?

Beachten Sie, dass ich nicht von anderen Frameworks oder Bibliotheken abhängig sein muss, die vom Browser nativ unterstützt werden.

+0

Ich bin ein ähnliches Problem haben, haben Sie dieses Problem lösen? –

+1

Ich hatte das gleiche Problem und es wurde von http://stackoverflow.com/a/35291777/3192470 gelöst. – lakesare

Antwort

0

Ich hatte das gleiche Problem versucht, einige Inhalte aus der Instagram-API zu holen und löste es mit einer jsonp-Bibliothek. Dies ist diejenige, die ich verwendet: https://github.com/camsong/fetch-jsonp

Meine Anfrage:

import fetchJsonp from 'fetch-jsonp';  
return fetchJsonp(`https://api.instagram.com/oembed?url=${url}`, { 
     method: 'GET', 
     mode: 'no-cors', 
     credentials: 'include', 
    }) 
     .then(response => response.json()) 
     .then(response => {}); 

Hoffe, es hilft :)

+2

Warum können wir das normale Fetch-Objekt nicht verwenden? Das ist seltsam, was macht diese Lib anders? –

+0

Es fügt Unterstützung für Jsonp-Anfragen hinzu, die von der Fetch-API standardmäßig nicht unterstützt werden – keyserfaty

Verwandte Themen