2016-05-13 39 views
9

Quando si utilizza l'API di recupero per recuperare alcuni JSON da un'API REST sul mio server locale e si tenta di analizzare la risposta con response.json(), sto ricevendo un unexpected end of input errore.API di recupero - utilizzando response.json() genera un errore imprevisto di input

L'errore è facilmente riproducibile sul mio server locale con il seguente one-liner:

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 

Se visualizzo la scheda di rete, posso vedere che la mia richiesta è stata soddisfatta dal server, e se l'anteprima la risposta Riesco a vedere che c'è un JSON valido disponibile lì (l'ho ricontrollato copiando e incollando il JSON dalla scheda Network Response in jsonlint.com). Ecco un esempio della risposta sto ottenendo dal server:

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

Se provo ad usare response.text() invece di response.json() ottengo una stringa vuota.

Qualche idea su dove potrei sbagliare con questo?

Nota che è necessario non dipendere da altri framework o librerie diversi da quelli supportati nativamente dal browser.

+0

Sto avendo un problema simile, avete risolto questo? –

+1

Ho avuto lo stesso problema ed è stato risolto da http://stackoverflow.com/a/35291777/3192470. – lakesare

risposta

0

Ho avuto lo stesso problema cercando di recuperare alcuni contenuti dall'API di Instagram e l'ho risolto utilizzando una libreria jsonp. Questo è quello che ho usato: https://github.com/camsong/fetch-jsonp

La mia richiesta:

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 => {}); 

Speranza che aiuta :)

+2

Perché non possiamo usare il normale oggetto fetch? Questo è strano, cosa fa questa lib in modo diverso? –

+0

Aggiunge il supporto per le richieste jsonp che non sono supportate dalla API di recupero per impostazione predefinita – keyserfaty