Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znaki specjalne w linkach
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
gaza
Witam.

Torche już pisze w JS, ale nadal pewne rzeczy mnie zaskakuja i pewnie jeszcze trochę bedą.

Chodzi o znaki specjalne.

Czy może mi ktoś powiedzieć dlaczego jeżeli napiszę coś takiego
  1. self.location.href=skrypt.php?zmienna1=kazio&partnerId=10000

Przeglądarka się wysypuje i pisze
  1. uncaught exception: [Exception... "Component returned failure code: 0x805e000a [nsIDOMLocation.href]" nsresult: "0x805e000a (<unknown>)" location: "JS frame :: http://localhost/skrypt.php :: zupka :: line 36" data: no]
  2.  
  3. Line 0

Dodam , że uzywam mozilki 2.0 ( na IE jeszcze nie sprawdzałem )
Okazało się, ze litera "p" w nazwie parametru partnerId wraz z & powodowała ten błąd.
Poradziełem sobie tak, że poprostu zmienilem nazwe parametru na
  1. artnerId

Nie jest to jednak tak jak powinno być.

Spotkał się już ktoś z czymś podobnym ?
A może poprostu coś źle robie ?

Pozdrawiam
Shili
Spróbuj zamiast & użyć &amp;
.radex
self.location.href='skrypt.php?zmienna1=kazio&partnerId=10000';

btw. zawsze mówiłem, że gecko jest cienkie - żeby na czymś takim się wysypać.
gaza
Z &amp działa.
Dzięki.

Zastanawia mnie tylko to, dlaczego tak się dzieje.

Pozdrawiam
.radex
Nie znam się na JS, ale wydaje mi się, że dlatego, że stringi powinny być w apostrofach/cudzysłowach
gaza
Wydaje mi sie, ze nie ( nie sprawdzilem ), ze apostrofy czy inne cudzyslowy byłyby traktowane jako wartosc parametru.
A to dlatego, ze parametry zaczynaja sie do ? i separatorem jest &.

najwazniejsze ze juz dziala .
Stracilem na to 2 godziny ( zle sie zasugerowalem i zabrnalem w slepa uliczke )
Shili
& to znak specjalny - on powoduje, że wyszukiwarka dalej dopatruje się encji zakończonej znakiem ;
Żeby poprawnie wyświetlić znak & trzeba więc użyć właśnie encji.
Crozin
Dlaczego? A daltego, że
Kod
skrypt.php?zmienna1=kazio&partnerId=10000
JS będzie interpretować jako:
Jeżeli pole php klasy skrypt ma wartość true to zmiennej zmienna1 przypisz wartość zmiennej kazio (otem jest znak &, który powoduje błąd (powinien być : (dwukropek))) w innym wypadku przypisz zmiennej partnerId wartość 10000.

Natomiast
Kod
"skrypt.php?zmienna1=kazio&partnerId=10000"
oznacz zwykły tekst (ciąg znaków) - String
gaza
Nie zgodze sie z toba .
To o czym piszesz mialobymiejsce gdyby to byl operator trojargumentowy, a ze nie ma ":" to to nie jest.

Dla przejrzystosci wkleje funkcje ktora to robi.
Nie pytajcie dlaczego funkcja a dlaczego nie inne rozwiazanie. W tej sprawie nie ma to znaczenia.
  1. function zupka(f)
  2. {
  3. for (var i = 0, text = ''; i < f.elements.length; i++)
  4. {
  5. if (f.elements[i].name == '') continue;
  6. switch (f.elements[i].type)
  7. {
  8. case 'checkbox':
  9. if (f.elements[i].checked) text += f.elements[i].name + '=' + f.elements[i].value + '&';
  10. break;
  11. default:
  12. text += f.elements[i].name + '=' + f.elements[i].value + '&';
  13. break;
  14. }
  15. }
  16.  
  17. url = text.substring(0, text.length-5);
  18. url = f.action + '?' + url
  19.  
  20. if (typeof(url) == 'string')
  21. self.location.href = url;
  22. else
  23. alert ('Błąd JAVASCRIPT - operacja nieudana');
  24. }


Musze tez dodac, ze jednak nie dziala.
PHP otrzymuje jako nazwy parametrow cos takiego "amppartnerId=1000", jezeli w JS uzyje "&amp;" to PHP widzi to jako "amp;partnerId=1000"
Jak widac funkcja przetwarza checkboxy i moze ich byc nawet 40 i wiecej. Wysypuje sie dopiero gdy w formularzu dodalem paramater "partnerId"
.radex
Faktem jest jednak, że w JS należy do stringów używać apostrofów/cudzysłowów.
Crozin
Cytat
Nie zgodze sie z toba .
To o czym piszesz mialobymiejsce gdyby to byl operator trojargumentowy, a ze nie ma ":" to to nie jest.
Doskonale o tym wiem - ale napisałem, czego się spodziewna JS (a spodziewa się :, a nie &)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.