Próbuję skierować przeglądarkę na inną stronę. Gdybym chciał żądania GET, mógłbym powiedzieć
document.location.href = 'http://example.com/q=a';
Ale zasób, do którego próbuję uzyskać dostęp, nie zareaguje poprawnie, chyba że użyję żądania POST. Jeśli nie byłyby generowane dynamicznie, mógłbym użyć HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Następnie prześlę formularz z DOM.
Ale naprawdę chciałbym kodu JavaScript, który pozwala mi powiedzieć
post_to_url('http://example.com/', {'q':'a'});
Jaka jest najlepsza implementacja w różnych przeglądarkach?
Edytować
Przepraszam, że nie było jasne. Potrzebuję rozwiązania, które zmienia lokalizację przeglądarki, podobnie jak przesłanie formularza. Jeśli jest to możliwe w przypadku XMLHttpRequest , nie jest to oczywiste. I to nie powinno być asynchroniczne ani używać XML, więc Ajax nie jest odpowiedzią.
Odpowiedzi:
Dynamicznie twórz
<input>
s w formularzu i prześlij goPrzykład:
EDYCJA : Odkąd to zostało tak wysoko ocenione, domyślam się, że ludzie będą to często kopiować. Dodałem więc
hasOwnProperty
czek, aby naprawić wszelkie niezamierzone błędy.źródło
To byłaby wersja wybranej odpowiedzi przy użyciu jQuery .
źródło
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Prosta szybka i brudna implementacja odpowiedzi @Aaron:
Oczywiście powinieneś raczej użyć frameworka JavaScript, takiego jak Prototype lub jQuery ...
źródło
Korzystanie z
createElement
funkcji podanej w tej odpowiedzi , która jest konieczna ze względu na zerwanie IE z atrybutem name na elementach tworzonych normalnie za pomocądocument.createElement
:źródło
Odpowiedź Rakesha Pai jest niesamowita, ale pojawia się problem (w Safari ), gdy próbuję wysłać formularz z polem o nazwie
submit
. Na przykładpost_to_url("http://google.com/",{ submit: "submit" } );
. Lekko załatałem tę funkcję, aby obejść to zderzenie zmiennej przestrzeni.źródło
Nie. Nie możesz poprosić o przesłanie posta JavaScript jak formularz.
Możesz mieć formularz w HTML, a następnie przesłać go za pomocą JavaScript. (jak wyjaśniono wiele razy na tej stronie).
Możesz sam stworzyć HTML, nie potrzebujesz JavaScript do pisania HTML. Byłoby głupie, gdyby ludzie to sugerowali.
Twoja funkcja po prostu skonfiguruje formularz tak, jak chcesz.
Następnie użyj go jak.
Ale po prostu pominę tę funkcję i po prostu zrobię.
Wreszcie decyzja o stylu przechodzi do pliku ccs.
Osobiście uważam, że formularze powinny być adresowane po imieniu, ale w tej chwili nie jest to ważne.
źródło
Jeśli masz zainstalowany Prototyp , możesz zaostrzyć kod, aby wygenerować i przesłać ukryty formularz w następujący sposób:
źródło
oto odpowiedź rakesh, ale z obsługą tablic (co jest dość powszechne w formach):
zwykły javascript:
och, a oto wersja jquery: (nieco inny kod, ale sprowadza się do tego samego)
źródło
Jednym z rozwiązań jest wygenerowanie formularza i przesłanie go. Jedna implementacja to
Mogę więc zaimplementować bookmarklet skracający adresy URL za pomocą prostej
źródło
Cóż, chciałbym przeczytać wszystkie pozostałe posty, aby nie tracić czasu na tworzenie tego z odpowiedzi Rakesh Pai. Oto rekurencyjne rozwiązanie, które działa z tablicami i obiektami. Brak zależności od jQuery.
Dodano segment do obsługi przypadków, w których cały formularz należy przesłać jak tablicę. (tzn. gdzie wokół listy przedmiotów nie ma obiektu opakowującego)
źródło
Tutaj trzy opcje.
Standardowa odpowiedź JavaScript: użyj frameworka! Większość frameworków Ajax wyodrębni cię z łatwego sposobu na wykonanie testu POST XMLHTTPRequest .
Złóż zapytanie XMLHTTPRequest samodzielnie, przekazując pocztę do metody otwartej zamiast get. (Więcej informacji w temacie Korzystanie z metody POST w XMLHTTPRequest (Ajax) .)
Za pomocą JavaScript dynamicznie utwórz formularz, dodaj akcję, dodaj dane wejściowe i prześlij ją.
źródło
Wybrałbym trasę Ajax, jak sugerowali inni, z czymś takim jak:
źródło
Najłatwiejszym sposobem jest użycie Ajax Post Request:
gdzie:
Następnie w module obsługi sukcesu przekieruj przeglądarkę za pomocą czegoś takiego jak window.location.
źródło
Oto jak napisałem to za pomocą jQuery. Testowane w Firefox i Internet Explorer.
źródło
Prototype biblioteka zawiera Hashtable obiekt, z „.toQueryString ()” metoda, która pozwala łatwo włączyć JavaScript Object / struktury na ciąg znaków zapytania w stylu string. Ponieważ post wymaga, aby „treść” żądania była ciągiem sformatowanym jako ciąg zapytania, umożliwia to poprawne działanie żądania Ajax jako posta. Oto przykład z użyciem Prototypu:
źródło
Działa to doskonale w moim przypadku:
Możesz użyć go w funkcji takiej jak:
Za pomocą tego możesz opublikować wszystkie wartości danych wejściowych.
źródło
Jeszcze jedno rekurencyjne rozwiązanie, ponieważ niektóre z nich wydają się być zepsute (nie przetestowałem ich wszystkich). To zależy od lodash 3.x i ES6 (jQuery nie jest wymagane):
źródło
Moje rozwiązanie koduje głęboko zagnieżdżone obiekty, w przeciwieństwie do obecnie akceptowanego rozwiązania @RakeshPai.
Wykorzystuje bibliotekę npm „qs” i jej funkcję stringify do przekształcania zagnieżdżonych obiektów w parametry.
Ten kod działa dobrze z back-endem Railsów, chociaż powinieneś być w stanie zmodyfikować go, aby działał z dowolnym backendem, którego potrzebujesz, modyfikując opcje przekazane do stringify. Railsy wymagają, aby tablicaFormat była ustawiona na „nawiasy”.
Przykład:
Tworzy następujące parametry Railsów:
źródło
FormObject jest opcją. Ale FormObject nie jest obecnie obsługiwany przez większość przeglądarek.
źródło
To jest jak opcja Alana 2 (powyżej). Jak utworzyć instancję httpobj, pozostawia się jako ćwiczenie.
źródło
Jest to oparte na kodzie beauSD używającym jQuery. Jest ulepszony, dzięki czemu działa rekurencyjnie na obiektach.
źródło
Możesz dynamicznie dodać formularz za pomocą DHTML, a następnie przesłać.
źródło
Możesz użyć biblioteki takiej jak jQuery i jej metody $ .post .
źródło
Używam java document.forms i zapętlam go, aby uzyskać wszystkie elementy w formularzu, a następnie wysyłam za pośrednictwem xhttp. To jest moje rozwiązanie dla przesyłania javascript / ajax (z całym kodem HTML zawartym jako przykład):
źródło
Możesz użyć metody wyzwalacza jQuery do przesłania formularza, tak jak naciskasz przycisk, tak jak,
prześle w przeglądarce.
źródło
Metodą, której używam do automatycznego wysyłania i kierowania użytkownika na inną stronę, jest napisanie ukrytego formularza, a następnie automatyczne przesłanie go. Zapewniamy, że ukryta forma absolutnie nie zajmuje miejsca na stronie internetowej. Kod byłby mniej więcej taki:
Zastosowanie automatycznego przesyłania
Zastosowanie automatycznego wysyłania kierowałoby wartości formularza, które użytkownik automatycznie umieszczał na drugiej stronie z powrotem na tę stronę. Taka aplikacja wyglądałaby tak:
źródło
Oto jak to robię.
źródło
Żadne z powyższych rozwiązań nie obsługiwało głęboko zagnieżdżonych parametrów za pomocą jQuery, więc oto moje rozwiązanie za dwa centy.
Jeśli używasz jQuery i potrzebujesz obsługi głęboko zagnieżdżonych parametrów, możesz użyć tej funkcji poniżej:
Oto przykład, jak z niego korzystać. Kod HTML:
A jeśli klikniesz przycisk testowy, opublikuje formularz i otrzymasz następujące wartości w POST:
Uwaga: jeśli chcesz wysłać formularz do innego adresu URL niż bieżąca strona, możesz podać adres URL jako drugi argument funkcji postForm.
Na przykład (aby ponownie użyć twojego przykładu):
Mam nadzieję że to pomoże.
Uwaga 2: kod został pobrany z wtyczki przekierowania . Zasadniczo po prostu uprościłem to dla moich potrzeb.
źródło
Wtyczka jQuery do przekierowania za pomocą POST lub GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Aby przetestować, dołącz powyższy plik .js lub skopiuj / wklej klasę do swojego kodu, a następnie użyj kodu tutaj, zastępując „argumenty” nazwami zmiennych, a „wartości” wartościami odpowiednich zmiennych:
źródło
Możesz wykonać wywołanie AJAX (prawdopodobnie używając biblioteki takiej jak Prototype.js lub JQuery). AJAX obsługuje zarówno opcje GET, jak i POST.
źródło