2012-07-30 19 views
16

Edytuj: Żadna z sugerowanych dotąd odpowiedzi w ogóle nie zadziałała.

Używam tej rozmowy z django. Przy pierwszym uruchomieniu serwer zwraca "n_usr" (który zmienia formę plików użytkownika). Drugi raz, po prostu wyrzuca błąd Illegal invocation.

function log_in() { 

     username = $('#usr_enter').val(); 
     password = $('#pass_enter').val(); 
     if(!n_usr){ 
      $.post('/ajax/login',{password: password, username: username}, function(data) { 
       if(data == "n_usr"){ 
       $('#new_user_entry').show('slow'); 
       n_usr = true; 
       } 
       else { 

       } 

      }) 
    }else { 
     password2 = $('#pass_re_enter'); 
     penname = $('#pen_enter'); 
      $.post('/ajax/login', {password: password, password2: password2, username: username, pen_name: penname, TN: "TN"}, function(data) { 
       if(data == "e_act"){ 

       } else { 

       } 
      }); 
     } 
    } 
+0

'Nielegalna inwokacja" oznacza, że ​​wywołujesz funkcję w niewłaściwym kontekście. –

+0

@Rocket Co masz na myśli przez kontekst? –

+0

Jak próba wywołania 'console.log.call (document, 'test')'. To nazywa się 'console.log' w kontekście' dokumentu'. Lub 'setTimeout (someFunc)'. –

Odpowiedz

19

W swojej else masz:

password2 = $('#pass_re_enter'); 
penname = $('#pen_enter'); 

Wtedy masz:

{password: password, password2: password2, username: username, pen_name: penname, TN: "TN"} 

otrzymujesz Illegal invocation ponieważ jQuery próbuje serializacji obiektu jQuery dla $.post, i nie może . Prawdopodobnie próbuje wywołać metodę łańcuchową i przekazuje jej obiekt jQuery jako kontekst, powodując błąd. Musisz dodać .val().

password2 = $('#pass_re_enter').val(); 
penname = $('#pen_enter').val(); 
+0

Co zamierzałem również zasugerować. –

+0

Kocham cię. Miałem podobny błąd i z jakiegoś powodu zapomniałem dodać parametr z ".val()", otrzymywałem najbardziej dziwne błędy. Po godzinie zrobiłem to dobrze! Zawsze robię najwięcej małych błędów ... to wymaga dużej uwagi. Tjìhank cię;) – G4bri3l

+0

@ G4bri3l: Proszę bardzo! :-RE –

0

Więc nie jesteś nazywając je tak samo - po raz pierwszy:

$.post(url_base+'/ajax/login' ... 

i 2nd

$.post('/ajax/login', {.... 

Change 2nd jeden obejmować url_base.

+0

To mi odpowiada. +1 – Ohgodwhy

+0

W jaki sposób spowodowałoby to błąd "Nielegalnej inwokacji"? –

+0

url_base jest pustym ciągiem, który myślałem, że usunąłem z programu. Dodanie go do drugiego połączenia niczego nie zmienia. W każdym razie dzięki. –