Muszę wykonać żądanie HTTP GET w JavaScript. Jak najlepiej to zrobić?
Muszę to zrobić w widżecie kodu kreskowego Mac OS X.
javascript
xcode
http-get
dashcode
Mclaughlinj
źródło
źródło
Odpowiedzi:
Przeglądarki (i Dashcode) udostępniają obiekt XMLHttpRequest, którego można używać do wysyłania żądań HTTP z JavaScript:
Jednak żądania synchroniczne są odradzane i generują ostrzeżenie w następujący sposób:
Należy wykonać żądanie asynchroniczne i obsłużyć odpowiedź w module obsługi zdarzeń.
źródło
W jQuery :
źródło
Wiele świetnych porad powyżej, ale niezbyt wielokrotnego użytku i zbyt często wypełnionych nonsensami DOM i innymi puchami, które ukrywają łatwy kod.
Oto utworzona przez nas klasa JavaScript, która jest wielokrotnego użytku i łatwa w użyciu. Obecnie ma tylko metodę GET, ale to działa dla nas. Dodanie POST nie powinno obciążać niczyich umiejętności.
Korzystanie z niego jest tak proste, jak:
źródło
ReferenceError: XMLHttpRequest is not defined
Nowe
window.fetch
API jest czystszym zamiennikiem,XMLHttpRequest
który korzysta z obietnic ES6. Jest ładny wyjaśnienie tutaj , ale sprowadza się do (z artykułu):Obsługa przeglądarek jest teraz dobra w najnowszych wydaniach (działa w Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), przeglądarka Android i Chrome na Androida), jednak IE będzie prawdopodobnie nie otrzyma oficjalnego wsparcia. GitHub ma polifill udostępnia który jest zalecany do obsługi starszych przeglądarek, które nadal są w dużej mierze w użyciu (szczególnie wersje Safari sprzed marca 2017 i przeglądarki mobilne z tego samego okresu).
Myślę, że jest to wygodniejsze niż jQuery lub XMLHttpRequest, czy nie, zależy od charakteru projektu.
Oto link do specyfikacji https://fetch.spec.whatwg.org/
Edytować :
Używając asynchronicznego / oczekującego ES7, staje się to po prostu (na podstawie tej Gist ):
źródło
fetch(url, { credentials:"include" })
window.fetch
nie jest dostarczany z analizatorem XML, ale możesz samodzielnie przeanalizować odpowiedź, jeśli potraktujesz ją jako tekst (a nie json, jak w powyższym przykładzie). Zobacz stackoverflow.com/a/37702056/66349 dla przykładuWersja bez oddzwaniania
źródło
setInterval
rozmowę.Oto kod do zrobienia tego bezpośrednio za pomocą JavaScript. Ale, jak wspomniano wcześniej, lepiej byłoby skorzystać z biblioteki JavaScript. Moim ulubionym jest jQuery.
W poniższym przypadku wywoływana jest strona ASPX (która służy jako usługa REST biednego człowieka) w celu zwrócenia obiektu JSON JavaScript.
źródło
źródło
Krótkie i czyste:
źródło
IE będzie buforować adresy URL, aby przyspieszyć ładowanie, ale jeśli, powiedzmy, odpytujesz serwer w odstępach czasu, próbując uzyskać nowe informacje, IE zbuforuje ten adres URL i prawdopodobnie zwróci ten sam zestaw danych, który zawsze miałeś.
Niezależnie od tego, jak ostatecznie wykonasz żądanie GET - waniliowy JavaScript, prototyp, jQuery itp. - upewnij się, że wprowadziłeś mechanizm do walki z buforowaniem. Aby temu przeciwdziałać, dołącz unikalny token na końcu adresu URL, który chcesz trafić. Można to zrobić przez:
Spowoduje to dodanie unikatowego znacznika czasu na końcu adresu URL i zapobiegnie buforowaniu.
źródło
Prototyp sprawia, że jest to bardzo proste
źródło
Jedno rozwiązanie obsługujące starsze przeglądarki:
Może nieco przesada, ale na pewno skorzystasz z tego kodu.
Stosowanie:
źródło
Nie jestem zaznajomiony z widżetami kodów kreskowych Mac OS, ale jeśli pozwalają one na używanie bibliotek JavaScript i obsługę XMLHttpRequests , użyłbym jQuery i zrobiłbym coś takiego:
źródło
W pliku Info.plist widżetu nie zapomnij ustawić swojego
AllowNetworkAccess
klucza na true.źródło
Najlepszym sposobem jest użycie AJAX (prosty tutorial na tej stronie Tizag ). Powodem jest to, że każda inna technika, której możesz użyć, wymaga więcej kodu, nie gwarantuje się pracy w różnych przeglądarkach bez przeróbek i wymaga użycia większej ilości pamięci klienta poprzez otwieranie ukrytych stron w ramkach, przekazując adresy URL analizując ich dane i zamykając je. AJAX jest sposobem na wyjście w tej sytuacji. Że moje dwa lata intensywnego rozwoju javascript mówią.
źródło
Dla tych, którzy używają AngularJs , jest to
$http.get
:źródło
Żądanie HTTP GET można uzyskać na dwa sposoby:
To podejście oparte na formacie xml. Musisz podać adres URL żądania.
Ten oparty jest na jQuery. Musisz podać adres URL i nazwę funkcji, do której chcesz zadzwonić.
źródło
Aby to zrobić, Fetch API jest zalecanym podejściem przy użyciu obietnic JavaScript. XMLHttpRequest (XHR), obiekt IFrame lub znaczniki dynamiczne są starszymi (i bardziej niezgrabnymi) podejściami.
Oto świetne demo pobierania i dokumenty MDN
źródło
To samo można zrobić w przypadku żądania wysłania.
Spójrz na ten link Żądanie wpisu JavaScript jak formularz
źródło
Proste żądanie asynchroniczne:
źródło
Ajax
Najlepiej skorzystaj z biblioteki takiej jak Prototype lub jQuery .
źródło
źródło
Jeśli chcesz użyć kodu widżetu Dashboard i nie chcesz dołączać biblioteki JavaScript do każdego utworzonego widgetu, możesz użyć obiektu XMLHttpRequest, który Safari domyślnie obsługuje.
Jak donosi Andrew Hedges, widget domyślnie nie ma dostępu do sieci; musisz zmienić to ustawienie w info.plist powiązanym z widżetem.
źródło
Aby odświeżyć najlepszą odpowiedź od joanna z obietnicą, oto mój kod:
źródło
Nowoczesne, czyste i najkrótsze
Pokaż fragment kodu
źródło
Możesz to zrobić również z czystym JS:
Zobacz: więcej szczegółów: tutorial html5rocks
źródło
źródło
Oto alternatywa dla plików XML do ładowania plików jako obiektu i uzyskiwania dostępu do właściwości jako obiektu w bardzo szybki sposób.
XML działa jak drzewo, dobrze? zamiast pisać
napisz prosty plik taki jak ten:
Zapisz plik .. Teraz wywołaj funkcję ....
teraz możesz efektywnie uzyskiwać swoje wartości.
To tylko mały prezent, który można wnieść do grupy. Dzięki za polubienie :)
Jeśli chcesz przetestować tę funkcję na komputerze PC, uruchom ponownie przeglądarkę, wykonując następujące polecenie (obsługiwane przez wszystkie przeglądarki oprócz safari):
źródło