Dois pontos de token inesperados: resolvendo erros JSONP em jQuery.ajax#get
Ao encontrar um erro "dois pontos de token inesperado" em jQuery.ajax #get, é importante entender a natureza das solicitações JSONP (JSON com preenchimento). JSONP envolve o envio de dados JSON de volta para uma chamada de função JavaScript global no lado do cliente.
Para oferecer suporte a JSONP, o servidor deve incluir o "preenchimento" na resposta. O "Padding" consiste em um nome de função de retorno de chamada seguido pelos dados JSON entre parênteses:
jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})
Neste exemplo, o nome da função de retorno de chamada é jQuery111108398571682628244_1403193212453. O erro ocorre porque o JavaScript analisa JSONP como JavaScript, onde {...} também representa blocos.
Para corrigir esse erro, o servidor precisa incluir o "Padding" na resposta. Além disso, o jQuery normalmente incluirá um parâmetro de string de consulta de retorno de chamada com o nome da função. Para acomodar isso, o código do servidor pode usar uma instrução condicional para verificar o parâmetro de retorno de chamada e enviar a resposta de acordo:
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); }
Como alternativa, ExpressJS fornece um método res.jsonp() que já trata dessa condição, facilitando o retorno de respostas JSONP:
app.get( '/', function( req, res ) { console.log( 'req received' ); res.jsonp({ Name : "Tom", Description : "Hello it's me!" }); });
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3