jQuery.post(). Błąd składni po użyciu frazy "do"

0

Witam, mam taki kawałek kodu:

...
$.post('message.php', {give:$('#give_f').val(),do:$('#do').val()},function(data)
{
...

Pod FF, IE i Chrome wszystko dziala ok, jednak w Operze ten kawalek kodu wyswietla blad w konsoli...

Linked script compilation
Syntax error at line 13 while loading:
'#give_f').val(),do:$('#do').val()},f
--------------------^
expected '}', got keyword 'do'

Jak mogę naprawic ten blad?

0

probowales kiedys czytac błedy konsoli? bo myśle ze ten kod zwroci bład o słowie kluczowym "do" (myśle ze powinieneś dać je w ")

0

Tak, probowalem, ale wg. specyfikacji jQuery ten kod jest poprawny. Dodatkowo tak jak pisalem w innych przegladarkach (nawet IE) dziala, problem dotyczy tylko Opery

0

Dodatkowo, tlumaczac

expected '}', got keyword 'do'

Brzmi: Oczekiwano '}' otrzymano slowo 'do'

' i ' sa tu tylko zaznaczeniem odowiedniego znaku/ciagu.

0

po prostu wsadz do w nawiasy

1

Opera zachowuje się zgodnie ze specyfikacją języka JavaScript. Słowa zastrzeżone, takie jak do, NIE MOGĄ być użyte jako nazwy zmiennych lub parametrów, a także jako nazwy własności w notacji kropkowej, czyli np. obj.do jest nielegalne.

Niestety, jest to błąd projektowy języka.

Lista słów zastrzeżonych jest długa. Tak naprawdę nie powinno być problemu z używaniem ich jako nazw własności obiektów. Istnieją parsery, które pozwalają nawet nadawać zmiennym nazwy takie jak do -- w jednej funkcji należy tylko wybrać, czy używamy danego słowa zastrzeżonego jako słowa kluczowego (czyli np. do jako początku pętli do-while), czy jako nazwy zmiennej (czyli np. var do;). Normalne przeglądarki może nie pozwalają aż na takie dziwolągi, ale -- jak widzisz -- pozwalają na używanie słów zastrzeżonych jako nazw własności. Opera nie pozwala, ale to nie znaczy, że Opera jest jakaś be -- stosuje się po prostu do specyfikacji języka.

Rozwiązanie w przypadku nazw własności jest akurat dość proste: należy użyć cudzysłowów. Czyli nie { do: cośtam } tylko { "do": cośtam}. Choć lepszym rozwiązaniem byłaby IMO zmiana nazwy zmiennej. U Ciebie np. mogłaby to być doValue.

Oczywiście, fakt, że wg specyfikacji jQuery ten kod jest poprawny nie ma najmniejszego znaczenia. Specyfikacja jQuery definiuje jQuery, czyli bibliotekę działającą w obrębie języka JavaScript. Specyfikacja jQuery w żadnym razie nie może definiować samego JavaScriptu; to biblioteka jQuery powinna stosować się co specyfikacji JavaScriptu jeśli ma działać. No i się stosuje, choć być może niektóre przykłady ze specyfikacji nie.

RFabianski napisał(a)

po prostu wsadz do w nawiasy

Hm? Jak? Nie widzę jak nawiasy mogłyby tu pomóc. Cudzysłowy -- to owszem.

0

po prostu wsadz do w nawiasy

Hm? Jak? Nie widzę jak nawiasy mogłyby tu pomóc. Cudzysłowy -- to owszem.

Oczywiście mój błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1