2013-08-04 12 views
8

Mam skrypt, który przekierowuje użytkownika na inną stronę. Chcę załadować zawartość do elementu div na nowej stronie po całkowitym załadowaniu nowej strony. Jak mogę to zrobić. Poniższe nie działa.Jak mogę wykonać skrypt po wywołaniu window.location.href?

function goToPage() { 
    window.location.href = 'http://www.mypage.com/info; 
    $('.my_class').load('my/url/path/with/content/to/load'); 
} 

Nowo załadowana strona (http://www.mypage.com/info) zawiera następujące Gr:

<div class="my_class"></div> 

Co robię źle?

+7

Trzeba to zrobić na nowej stronie, nie można uruchomić skrypt na starej strony po przekierowałeś, kropka. – adeneo

+0

@adeneo jest poprawne. Czy istnieje powód, dla którego nie przekazujesz strony do załadowania jako parametr ciągu zapytania i ładowanie go na stronie 'onload' strony docelowej? –

Odpowiedz

0

Przekierowujesz przeglądarkę na window.location.href i obawiam się, że zmieniasz jedynie lokalizację przeglądarki, nie możesz mieć żadnego wpływu/danych wejściowych na stronie, do której się przenosisz (chyba że używasz parametrów ciągu zapytania i następnie tworzyć treści z czymś takim PHP (myurl.php newcontent = cokolwiek?))

+0

Można również użyć parametrów łańcucha zapytania, aby wpłynąć na dowolny skrypt JavaScript na nowej stronie, o ile jest zaprogramowany na ich wyszukiwanie. – doppelgreener

+0

Tak, to była moja sugestia? Przepraszam, jeśli to było niejasne, ale dlaczego w dół [poprawna odpowiedź]? – Alfie

+0

Poinformowałeś, że nie możesz wprowadzać żadnych danych na stronie, do której się przeprowadzasz, chyba że tworzysz treść za pomocą czegoś po stronie serwera. Możesz _pozwalać na stronie, do której się przeprowadzasz: podać ciąg zapytania (lub # fragment na końcu adresu URL, o którym wspomniały inne odpowiedzi), a JavaScript na tej stronie może odczytać ten ciąg zapytania (lub fragment) dla wkład. Taka metoda nie wymaga, aby _nie_ coś specjalnego działo się po stronie serwera, więc nie potrzebujesz jej do generowania treści. – doppelgreener

2

należy tylko uruchomić

$('.my_class').load('my/url/path/with/content/to/load'); 

na tej stronie: http://www.mypage.com/info.

Po wykonaniu window.location.href = 'http://www.mypage.com/info'; następuje przekierowanie do innej strony. Nic po tym się nie stanie. Zamiast tego należy uruchomić kod po tej linii na załadowanej stronie.

+0

Najbardziej podoba mi się ta odpowiedź, pytanie nie podaje żadnego powodu, dlaczego oba oświadczenia nie mogą być wykonane na ich własnych stronach, odpowiednio – farinspace

4

Jak wskazano w innych odpowiedziach, nie będzie można wykonać żadnych instrukcji skryptu z oryginalnej witryny. Zamiast używać PHP do statycznego tworzenia treści, można również użyć fragmentów HTML jako argumentów, np. tak:


// in the original page: 
function goToPage() { 
    window.location.href = 'http://www.mypage.com/info#my/url/path/with/content/to/load'; 
} 

// in http://www.mypage.com/info: 
$(document).ready(function() { 
    if(window.location.hash) 
     $('.my_class').load(window.location.hash.substring(1)); 
} 
+0

Słodki, I nie wiedział o window.location.hash. Chyba powinienem RTFM. – Tombatron

0

Po przekierowaniu nie można już wykonywać skrypty na tej stronie, a gdy strona jest rozładowany.

Spróbuj tego,

strona przekierowanie:

function goToPage() { 
window.location.href = 'http://www.mypage.com/info; 
} 

mypage.com/info:

JS:

$('.my_class').load('my/url/path/with/content/to/load'); 

html:

<div class="my_class"></div> 

Mam nadzieję, że to ci pomogło i daj mi znać, jeśli potrzebujesz dalszej pomocy!

11

Przekieruj do nowej strony, ale dołącz do wiadomości URL sygnał mieszający.

function goToPage() { 
    window.location.href = 'http://www.mypage.com/info#load-stuff; 
} 

Następnie od obciążenia strony docelowej, oceniać URL sprawdzanie tego sygnału hash.

function pageLoad() { 
    if (window.location.hash === "#load-stuff") { 
     $('.my_class').load('my/url/path/with/content/to/load'); 
    } 
} 

Jeśli aplikacja używa jQuery że to wyglądać mniej więcej tak:

$(function() { 
    if (document.URL.indexOf('#load-stuff') === -1) { 
     $('.my_class').load('my/url/path/with/content/to/load'); 
    } 
}); 

to jest grubsza przynajmniej.

+0

Wow! Dziękuję Ci bardzo. Tak przydatne! –

1

Możesz to zrobić na kilka różnych sposobów. Spróbuj użyć interfejsu API localstorage i przekazuj informacje lub treści za pomocą pary nazwy i wartości (lub kilku) i rozpakuj je po stronie odbiorcy.

Na stronie, do której przekierowujesz, sprawdź klucz localstorage, a następnie załaduj jego zawartość (wyżej wymienione pary wartości i nazwy) do elementu div.

Alternatywnie można napisać jeden plik skryptu, który można wdrożyć na kilku stronach; wykonaj sprawdzenie window.location.href i odpowiednio załaduj skrypt. Jeśli jesteś na przekierowanej stronie, możesz uruchomić dowolny skrypt, który ci się podoba. Przyjemną częścią robienia tego w ten sposób jest to, że nadal pracujesz z jednym plikiem JS - nie ma potrzeby fragmentacji kodu (zakładając, oczywiście, że strony, z którymi pracujesz są w tej samej witrynie).

Nie musisz robić nic z php, jeśli nie chcesz, lub hashe ... jest kilka fajnych narzędzi, które dadzą sobie radę, jeśli możesz wykorzystać HTML5 i powiązane z nim API.

+0

Tnx za nowy pomysł. Mam nieco inny przypadek. Używam również pliku location.href do wywoływania nowej strony, ale ta strona faktycznie wymusza pobranie pliku, a zatem po zakończeniu pobierania nadal pozostaję na oryginalnej stronie. Chcę rozpoznać, kiedy kończy się ładowanie/pobieranie tej strony, a strona oryginalna ma ponownie "kontrolę". To wydaje się jedyną odpowiedzią z przydatną sugestią dla mojej sprawy, więc +1. Nie znalazłem żadnych zdarzeń, które mogłyby rozpoznać koniec takiego połączenia. – userfuser

1
window.location = '#/MyPage'; 
setTimeout(function() { 
    //MyCode To Run After PageLoad 
}); 
+2

Proszę dodać wyjaśnienie do swojej odpowiedzi! –

+0

To działało dla mnie, chociaż musiałem się upewnić, że limit czasu to 1000ms zamiast 500 – Jackie

1

Prostym sposobem przekazania danych do przekierowanej strony jest ustawienie niektórych parametrów adresu URL.

Na przykład:

window.location.href - "http://youpage.com/?key=value" 

Gdy ta strona ładuje można mieć:

$(document).ready(function(){ 

    var my_param = getUrlParameter('key'); 
    if(my_param == "value"){ 
//do your stuff here 
} 

}); 


var getUrlParameter = function getUrlParameter(sParam) { 
    var sPageURL = decodeURIComponent(window.location.search.substring(1)), 
     sURLVariables = sPageURL.split('&'), 
     sParameterName, 
     i; 

    for (i = 0; i < sURLVariables.length; i++) { 
     sParameterName = sURLVariables[i].split('='); 

     if (sParameterName[0] === sParam) { 
      return sParameterName[1] === undefined ? true : sParameterName[1]; 
     } 
    } 
}; 
Powiązane problemy