Мне нужно сделать запрос HTTP GET в JavaScript. Какой лучший способ сделать это?
Мне нужно сделать это в виджете даш-кода Mac OS X.
javascript
xcode
http-get
dashcode
mclaughlinj
источник
источник
Ответы:
Браузеры (и Dashcode) предоставляют объект XMLHttpRequest, который можно использовать для выполнения HTTP-запросов из JavaScript:
Тем не менее, синхронные запросы не приветствуются и генерируют предупреждение в виде:
Вы должны сделать асинхронный запрос и обработать ответ внутри обработчика события.
источник
В jQuery :
источник
Выше приведено много полезных советов, но не очень многократно используемых, и слишком часто наполненных ерундой DOM и прочими ошибками, скрывающими простой код.
Вот класс Javascript, который мы создали, который можно использовать повторно и который легко использовать. В настоящее время у него есть только метод GET, но он работает для нас. Добавление POST не должно обременять чьи-либо навыки.
Использовать его так же просто, как:
источник
ReferenceError: XMLHttpRequest is not defined
Новый
window.fetch
API - более чистая замена,XMLHttpRequest
которая использует обещания ES6. Там хорошее объяснение здесь , но она сводится к (из статьи):Поддержка браузера теперь хороша в последних выпусках (работает в Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), браузере Android и Chrome для Android), однако IE будет скорее всего не получит официальной поддержки. В GitHub есть доступ к полифиллу, который рекомендуется для поддержки старых браузеров, которые все еще широко используются (особенно версии Safari до марта 2017 г. и мобильные браузеры того же периода).
Я думаю, будет ли это более удобно, чем jQuery или XMLHttpRequest или нет, зависит от характера проекта.
Вот ссылка на спецификацию https://fetch.spec.whatwg.org/
Редактировать :
Используя ES7 async / await, это становится просто (на основе этого Gist ):
источник
fetch(url, { credentials:"include" })
window.fetch
не имеет синтаксического анализатора XML, но вы можете проанализировать ответ самостоятельно, если обработаете его как текст (не json, как в примере выше). См. Для примера stackoverflow.com/a/37702056/66349Версия без обратного вызова
источник
setInterval
звонок.Вот код, чтобы сделать это напрямую с помощью JavaScript. Но, как упоминалось ранее, вам будет намного лучше с библиотекой JavaScript. Мой любимый JQuery.
В приведенном ниже случае ASPX-страница (служащая сервисом REST для бедного человека) вызывается для возврата объекта JSON JavaScript.
источник
источник
Коротко и чисто:
источник
IE будет кешировать URL-адреса, чтобы ускорить загрузку, но если вы, скажем, опрашиваете сервер через определенные промежутки времени, пытаясь получить новую информацию, IE будет кешировать этот URL-адрес и, вероятно, вернет тот же набор данных, который у вас всегда был.
Независимо от того, как вы в конечном итоге выполняете ваш запрос GET - ванильный JavaScript, Prototype, jQuery и т. Д. - убедитесь, что вы создали механизм для борьбы с кэшированием. Чтобы бороться с этим, добавьте уникальный токен в конец URL, который вы собираетесь нажать. Это может быть сделано:
Это добавит уникальную временную метку в конец URL и предотвратит любое кэширование.
источник
Прототип делает это просто
источник
Одно решение, поддерживающее старые браузеры:
Может быть, это несколько излишне, но вы определенно не рискуете этим кодом.
Применение:
источник
Я не знаком с виджетами Dashcode для Mac OS, но если они позволят вам использовать библиотеки JavaScript и поддерживать XMLHttpRequests , я бы использовал jQuery и сделал бы что-то вроде этого:
источник
В файле Info.plist вашего виджета не забудьте установить для своего
AllowNetworkAccess
ключа значение true.источник
Лучше всего использовать AJAX (вы можете найти простое руководство на этой странице Tizag ). Причина в том, что любой другой метод, который вы можете использовать, требует больше кода, он не гарантирует работу между браузерами без переделки и требует от вас использования большей клиентской памяти, открывая скрытые страницы внутри фреймов, передавая URL-адреса, анализируя их данные и закрывая их. AJAX - это путь в этой ситуации. Это мои два года тяжелого развития JavaScript.
источник
Для тех, кто использует AngularJs , это
$http.get
:источник
Получить HTTP-запрос GET можно двумя способами:
Этот подход основан на формате XML. Вы должны передать URL для запроса.
Этот основан на JQuery. Вы должны указать URL и имя_функции, которую хотите вызвать.
источник
Для этого рекомендуется использовать Fetch API, используя обещания JavaScript. XMLHttpRequest (XHR), объект IFrame или динамические теги являются более старыми (и более грубыми) подходами.
Вот отличная демонстрация и документы MDN
источник
То же самое можно сделать и для почтового запроса.
Посмотрите на эту ссылку JavaScript запроса пост как подчиненной формы
источник
Простой асинхронный запрос:
источник
Ajax
Лучше всего использовать библиотеку, такую как Prototype или jQuery .
источник
источник
Если вы хотите использовать код для виджета Dashboard и не хотите включать библиотеку JavaScript в каждый созданный вами виджет, вы можете использовать объект XMLHttpRequest, который изначально поддерживается Safari.
Как сообщает Эндрю Хеджес, по умолчанию виджет не имеет доступа к сети; вам нужно изменить этот параметр в info.plist, связанном с виджетом.
источник
Чтобы обновить лучший ответ Джоанна с обещанием, это мой код:
источник
Современный, чистый и самый короткий
Показать фрагмент кода
источник
Вы можете сделать это и с чистым JS:
Смотрите: для более подробной информации: учебник html5rocks
источник
источник
Вот альтернатива XML-файлам для загрузки ваших файлов как объекта и быстрого доступа к свойствам как объекта.
XML работает как дерево, хорошо? вместо того чтобы писать
напишите простой файл, подобный этому:
Сохраните свой файл .. Теперь вызовите функцию ....
теперь вы можете получить ваши ценности эффективно.
Это всего лишь маленький подарок для группы. Спасибо, что нравится :)
Если вы хотите проверить функцию на вашем ПК локально, перезапустите браузер с помощью следующей команды (поддерживается всеми браузерами, кроме safari):
источник