Necesito hacer un solicitud HTTP GET en JavaScript. ¿Cuál es la mejor manera de hacer eso?
Necesito hacer esto en un widget de código de tablero de Mac OS X.
javascript
xcode
http-get
dashcode
mclaughlinj
fuente
fuente
Respuestas:
Los navegadores (y Dashcode) proporcionan un objeto XMLHttpRequest que se puede usar para realizar solicitudes HTTP desde JavaScript:
Sin embargo, se desaconsejan las solicitudes sincrónicas y generarán una advertencia en la línea de:
Debe realizar una solicitud asincrónica y manejar la respuesta dentro de un controlador de eventos.
fuente
En jQuery :
fuente
Muchos de los excelentes consejos anteriores, pero no muy reutilizables, y con demasiada frecuencia están llenos de tonterías DOM y otras pelusas que ocultan el código fácil.
Aquí hay una clase de Javascript que creamos que es reutilizable y fácil de usar. Actualmente solo tiene un método GET, pero eso funciona para nosotros. Agregar un POST no debería gravar las habilidades de nadie.
Usarlo es tan fácil como:
fuente
ReferenceError: XMLHttpRequest is not defined
La nueva
window.fetch
API es un reemplazo más limpioXMLHttpRequest
que hace uso de las promesas de ES6. Hay una explicación agradable aquí , pero se reduce a (del artículo):El soporte del navegador ahora es bueno en las últimas versiones (funciona en Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), navegador Android y Chrome para Android), sin embargo, IE lo hará probablemente no obtenga apoyo oficial. GitHub tiene un polyfill disponible que se recomienda para admitir navegadores más antiguos aún en uso (especialmente versiones de Safari anteriores a marzo de 2017 y navegadores móviles del mismo período).
Supongo que si esto es más conveniente que jQuery o XMLHttpRequest o no, depende de la naturaleza del proyecto.
Aquí hay un enlace a la especificación https://fetch.spec.whatwg.org/
Editar :
Usando ES7 async / await, esto se vuelve simplemente (basado en este Gist ):
fuente
fetch(url, { credentials:"include" })
window.fetch
no viene con un analizador XML, pero puede analizar la respuesta usted mismo si la maneja como texto (no json como en el ejemplo anterior). Consulte stackoverflow.com/a/37702056/66349 para ver un ejemploUna versión sin devolución de llamada
fuente
setInterval
llamada.Aquí hay un código para hacerlo directamente con JavaScript. Pero, como se mencionó anteriormente, sería mucho mejor con una biblioteca de JavaScript. Mi favorito es jQuery.
En el siguiente caso, se está llamando a una página ASPX (que funciona como servicio REST de un hombre pobre) para devolver un objeto JSON de JavaScript.
fuente
fuente
Corto y limpio:
fuente
IE almacenará en caché las URL para que la carga sea más rápida, pero si, por ejemplo, está sondeando un servidor a intervalos tratando de obtener nueva información, IE almacenará en caché esa URL y probablemente devolverá el mismo conjunto de datos que siempre ha tenido.
Independientemente de cómo termine haciendo su solicitud GET (JavaScript vainilla, Prototype, jQuery, etc.), asegúrese de establecer un mecanismo para combatir el almacenamiento en caché. Para combatir eso, agrega un token único al final de la URL que vas a utilizar. Esto puede hacerse por:
Esto agregará una marca de tiempo única al final de la URL y evitará que ocurra el almacenamiento en caché.
fuente
El prototipo lo hace muy simple
fuente
Una solución que admite navegadores antiguos:
Tal vez sea un poco exagerado, pero definitivamente vas a salvo con este código.
Uso:
fuente
No estoy familiarizado con los widgets Dashcode de Mac OS, pero si te permiten usar bibliotecas JavaScript y admitir XMLHttpRequests , usaría jQuery y haría algo como esto:
fuente
En el archivo Info.plist de su widget, no olvide establecer su
AllowNetworkAccess
clave en true.fuente
La mejor manera es usar AJAX (puede encontrar un tutorial simple en esta página Tizag ). La razón es que cualquier otra técnica que pueda usar requiere más código, no se garantiza que funcione en varios navegadores sin volver a trabajar y requiere que use más memoria del cliente abriendo páginas ocultas dentro de marcos pasando URLs analizando sus datos y cerrándolos. AJAX es el camino a seguir en esta situación. Que mis dos años de desarrollo pesado javascript hablando.
fuente
Para aquellos que usan AngularJs , es
$http.get
:fuente
Puede obtener una solicitud HTTP GET de dos maneras:
Este enfoque basado en el formato xml. Debe pasar la URL de la solicitud.
Este está basado en jQuery. Debe especificar la URL y el nombre_función al que desea llamar.
fuente
Para hacer esto, Fetch API es el enfoque recomendado, usando Promesas de JavaScript. XMLHttpRequest (XHR), el objeto IFrame o las etiquetas dinámicas son enfoques más antiguos (y más complicados).
Aquí hay una gran demostración de recuperación y documentos de MDN
fuente
Lo mismo se puede hacer para la solicitud posterior también.
Echa un vistazo a este enlace Solicitud de publicación de JavaScript como un formulario enviar
fuente
Solicitud asíncrona simple:
fuente
Ajax
Sería mejor usar una biblioteca como Prototype o jQuery .
fuente
fuente
Si desea utilizar el código para un widget de Panel de control y no desea incluir una biblioteca de JavaScript en cada widget que haya creado, puede usar el objeto XMLHttpRequest que Safari admite de forma nativa.
Según lo informado por Andrew Hedges, un widget no tiene acceso a una red, por defecto; debe cambiar esa configuración en la lista de información asociada con el widget.
fuente
Para actualizar la mejor respuesta de joann con promesa, este es mi código:
fuente
Moderno, limpio y más corto
Mostrar fragmento de código
fuente
También puedes hacerlo con JS puro:
Ver: para más detalles: tutorial html5rocks
fuente
fuente
Aquí hay una alternativa a los archivos xml para cargar sus archivos como un objeto y acceder a las propiedades como un objeto de una manera muy rápida.
XML funciona como un árbol, ¿vale? en lugar de escribir
escribe un archivo simple como este:
Guarde su archivo ... Ahora llame a la función ...
ahora puede obtener sus valores de manera eficiente.
Es solo un pequeño regalo para contribuir al grupo. Gracias por tu gusto :)
Si desea probar la función en su PC localmente, reinicie su navegador con el siguiente comando (compatible con todos los navegadores excepto safari):
fuente