javascript - stackoverflow comù




Errore di restituzione della richiesta JSONP: "Uncaught SyntaxError: Token inaspettato:" (2)

Quindi sto cercando di fare una richiesta all'API Stack Exchange con il seguente codice jQuery:

$.ajax({                                                                                                                                                                                                        
    type: 'POST',                                                                                                                                                                                                 
    url: 'http://api.stackoverflow.com/1.1/stats',                                                                                                                                              
    dataType: 'jsonp',                                                                                                                                                                                                
    success: function() { console.log('Success!'); },                                                                                                                                                                                       
    error: function() { console.log('Uh Oh!'); }                                                                                                                                                              
});   

Ma quando apro il file sul mio computer, in FireFox o Chrome, e faccio la richiesta, ottengo questo errore:

Resource interpreted as Script but transferred with MIME type application/json.
Uncaught SyntaxError: Unexpected token :
Uh Oh!

Non ho idea di cosa sta succedendo. Conosco le API Stack Exchange Gzips le sue risposte, questo potrebbe causare problemi?

https://code.i-harness.com


Devi impostare un parametro non convenzionale per far funzionare l'API SO. Piuttosto che il callback convenzionale, è necessario passare un parametro jsonp .

Inoltre, non puoi fare il POST con JSONP.

$.ajax({                                                                                                                                                                                                        
    type: 'GET',                                                                                                                                                                                                 
    url: 'http://api..com/1.1/stats',                                                                                                                                              
    dataType: 'jsonp',                                                                                                                                                                                                
    success: function() { console.log('Success!'); },                                                                                                                                                                                       
    error: function() { console.log('Uh Oh!'); },
    jsonp: 'jsonp'                                                                                                                                                
});

Non è possibile eseguire AJAX tra domini utilizzando il convenzionale XMLHTTPRequest. Questo è per motivi di sicurezza (è chiamata la politica della stessa origine).

C'è una soluzione. script tag script non sono soggetti a questa restrizione. Ciò significa che è possibile inserire un tag script nel documento che chiama un URL. Se si definisce una funzione accessibile a livello globale nello script e si comunica al server remoto quale funzione viene chiamata, il server può passare il codice che avvolge i dati da inviare in una chiamata a tale funzione.

La difficoltà che hai qui è con l'API . Convenzionalmente, si usa l'argomento callback nella richiesta, per dire al server che cosa viene chiamata la propria funzione. Tuttavia, l'API di richiede invece di utilizzare il parametro jsonp .


Prova questo URL: http://api..com/1.1/stats?jsonp=callme

"callme" è il nome della tua funzione di callback - nel tuo GLOBAL NAMESPACE (oggetto finestra).

A proposito, se stai usando Firefox e hai installato il componente aggiuntivo JSONView puoi testare direttamente l'URL sopra (e il tuo per il confronto).

Risultato dalla chiamata all'URL:

callme({
  "statistics": [
...
  ]
})




stackexchange-api