2012-07-30 2 views
16

Редактировать: Ни один из предложенных ответов пока не работал.

Я выполняю этот вызов с помощью django. При первом запуске сервер возвращает «n_usr» (который изменяет форму, в которую входят файлы пользователя). Во второй раз он просто выбрасывает ошибку 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

'Незаконное обращение' означает, что вы вызываете функцию в неправильном контексте. –

+0

@Rocket Что вы подразумеваете под контекстом? –

+0

Как пытаться вызвать 'console.log.call (document, 'test')'. Это вызов 'console.log' в контексте' document'. Или 'setTimeout (someFunc)'. –

ответ

19

В вашем else, у вас есть:

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

Тогда у вас есть:

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

Вы получаете Illegal invocation потому что JQuery пытается сериализовать объект JQuery для $.post, и он не может , Вероятно, он пытается вызвать строковый метод и передает ему объект jQuery в качестве контекста, что вызывает ошибку.

Необходимо добавить .val().

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

То, что я собирался предложить. –

+0

Я тебя люблю. У меня была аналогичная ошибка, и по какой-то причине я забыл добавить параметр с «.val()», я получал самые странные ошибки. Через час я сделал все правильно! Я всегда делаю самые маленькие ошибки. Он занимает много внимания. Tjìhank вы;) – G4bri3l

+0

@ G4bri3l: Тебе очень рады! :-D –

0

Ну вы не называя их то же самое - первый раз:

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

и 2-й

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

Изменить 2-й один включить url_base.

+0

Это выглядит правильно для меня. +1 – Ohgodwhy

+0

Как это может вызвать ошибку «Незаконное обращение»? –

+0

url_base - пустая строка, которую я думал, что я удалил из программы. Добавление его во второй вызов ничего не меняет. Спасибо хоть. –

Смежные вопросы