javascript comù - Errore di restituzione della richiesta JSONP:"Uncaught SyntaxError:Token inaspettato:"




stackoverflow api (3)

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

$.ajax({                                                                                                                                                                                                        
    type: 'POST',                                                                                                                                                                                                 
    url: 'http://api..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?


Answers

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.stackoverflow.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 StackOverflow. Convenzionalmente, si usa l'argomento callback nella richiesta, per dire al server che cosa viene chiamata la propria funzione. Tuttavia, l'API di StackOverflow 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": [
...
  ]
})

Mi piace PhearJS , ma potrebbe essere parzialmente perché l'ho creato.

Detto questo, è un servizio che si esegue in background che parla HTTP (S) e rende le pagine come JSON per te, inclusi eventuali metadati che potrebbero essere necessari.







javascript ajax jquery stackexchange-api