Eu preciso fazer uma solicitação HTTP GET em JavaScript. Qual é a melhor maneira de fazer isso?
Preciso fazer isso em um widget de código de rastreio do Mac OS X.
javascript
xcode
http-get
dashcode
mclaughlinj
fonte
fonte
Respostas:
Navegadores (e Dashcode) fornecem um objeto XMLHttpRequest que pode ser usado para fazer solicitações HTTP a partir do JavaScript:
No entanto, solicitações síncronas são desencorajadas e gerarão um aviso ao longo das linhas de:
Você deve fazer uma solicitação assíncrona e manipular a resposta dentro de um manipulador de eventos.
fonte
No jQuery :
fonte
Muitos ótimos conselhos acima, mas não muito reutilizáveis, e muitas vezes repletos de bobagens do DOM e outros fluff que ocultam o código fácil.
Aqui está uma classe Javascript que criamos que é reutilizável e fácil de usar. Atualmente, ele possui apenas um método GET, mas isso funciona para nós. Adicionar um POST não deve sobrecarregar as habilidades de ninguém.
Usá-lo é tão fácil quanto:
fonte
ReferenceError: XMLHttpRequest is not defined
A nova
window.fetch
API é um substituto mais limpo,XMLHttpRequest
que faz uso das promessas do ES6. Há uma boa explicação aqui , mas tudo se resume a (do artigo):O suporte ao navegador agora é bom nas versões mais recentes (funciona no Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), navegador Android e Chrome para Android); no entanto, o IE provavelmente não obterá apoio oficial. O GitHub tem um polyfill disponível, recomendado para oferecer suporte a navegadores mais antigos ainda amplamente em uso (especialmente versões do Safari anteriores a março de 2017 e navegadores móveis do mesmo período).
Eu acho que isso é mais conveniente que jQuery ou XMLHttpRequest ou não, depende da natureza do projeto.
Aqui está um link para a especificação https://fetch.spec.whatwg.org/
Editar :
Usando o ES7 async / waitit, isso se torna simplesmente (com base neste Gist ):
fonte
fetch(url, { credentials:"include" })
window.fetch
não vem com um analisador de XML, mas você pode analisar a resposta por conta própria se a manipular como texto (não json, como no exemplo acima). Veja stackoverflow.com/a/37702056/66349 para um exemploUma versão sem retorno de chamada
fonte
setInterval
ligação.Aqui está o código para fazê-lo diretamente com JavaScript. Mas, como mencionado anteriormente, você ficaria muito melhor com uma biblioteca JavaScript. O meu favorito é o jQuery.
No caso abaixo, uma página ASPX (que está servindo como um serviço REST de pobre) está sendo chamada para retornar um objeto JSON JavaScript.
fonte
fonte
Curto e limpo:
fonte
O IE armazenará em cache os URLs para acelerar o carregamento, mas se você estiver, digamos, pesquisando um servidor em intervalos, tentando obter novas informações, o IE armazenará em cache esse URL e provavelmente retornará o mesmo conjunto de dados que você sempre teve.
Independentemente de como você acaba fazendo sua solicitação GET - JavaScript baunilha, Prototype, jQuery, etc. - certifique-se de colocar um mecanismo no local para combater o cache. Para combater isso, anexe um token exclusivo ao final do URL que você acessará. Isso pode ser feito por:
Isso anexará um carimbo de data / hora exclusivo ao final da URL e evitará que qualquer cache ocorra.
fonte
Protótipo simplifica
fonte
Uma solução que suporta navegadores antigos:
Talvez um pouco exagerado, mas você definitivamente fica seguro com esse código.
Uso:
fonte
Não estou familiarizado com os Widgets de Dashcode do Mac OS, mas se eles permitirem que você use bibliotecas JavaScript e suporte XMLHttpRequests , eu usaria o jQuery e faria algo assim:
fonte
No arquivo Info.plist do seu widget, não se esqueça de definir sua
AllowNetworkAccess
chave como verdadeira.fonte
A melhor maneira é usar o AJAX (você pode encontrar um tutorial simples nesta página Tizag ). O motivo é que qualquer outra técnica que você pode usar exige mais código, não é garantido que funcione em vários navegadores sem retrabalho e exige que você use mais memória do cliente abrindo páginas ocultas dentro dos quadros, passando URLs analisando seus dados e fechando-os. AJAX é o caminho a seguir nesta situação. Que meus dois anos de desenvolvimento pesado javascript falando.
fonte
Para quem usa AngularJs , é
$http.get
:fonte
Você pode obter uma solicitação HTTP GET de duas maneiras:
Essa abordagem é baseada no formato xml. Você precisa passar o URL para a solicitação.
Este é baseado em jQuery. Você deve especificar o URL e nome da função que deseja chamar.
fonte
Para fazer isso, a API de busca é a abordagem recomendada, usando o JavaScript Promises. XMLHttpRequest (XHR), objeto IFrame ou tags dinâmicas são abordagens mais antigas (e mais complicadas).
Aqui está uma excelente demonstração de busca e documentos MDN
fonte
O mesmo pode ser feito para a solicitação de postagem.
dê uma olhada neste link Solicitação de postagem em JavaScript como um formulário
fonte
Solicitação assíncrona simples:
fonte
Ajax
É melhor usar uma biblioteca como Prototype ou jQuery .
fonte
fonte
Se você deseja usar o código para um widget do Dashboard e não deseja incluir uma biblioteca JavaScript em todos os widgets criados, poderá usar o objeto XMLHttpRequest que o Safari suporta nativamente.
Conforme relatado por Andrew Hedges, um widget não tem acesso a uma rede, por padrão; você precisa alterar essa configuração no info.plist associado ao widget.
fonte
Para atualizar a melhor resposta de joann com promessa, este é o meu código:
fonte
Moderno, limpo e mais curto
Mostrar snippet de código
fonte
Você também pode fazer isso com JS puro:
Consulte: para obter mais detalhes: tutorial html5rocks
fonte
fonte
Aqui está uma alternativa aos arquivos xml para carregar seus arquivos como um objeto e acessar propriedades como um objeto de uma maneira muito rápida.
XML funciona como uma árvore ok? em vez de escrever
escreva um arquivo simples como este:
Salve seu arquivo .. Agora chame a função ....
agora você pode obter seus valores com eficiência.
É apenas um pequeno presente para contribuir com o grupo. Obrigado do seu gosto :)
Se você deseja testar a função localmente no seu PC, reinicie o navegador com o seguinte comando (suportado por todos os navegadores, exceto o safari):
fonte