2012-03-05 4 views
0

Моя цель - разрешить пользователям без входа просматривать страницу с помощью кнопки закладок. Когда пользователь не запустится на кнопку закладки, ему должна быть представлена ​​форма входа в модальную форму, отправить свои учетные данные и добавить закладку (так же, как это делает Yelp).jQuery post form and callback

Моя проблема заключается в том, что я не могу сделать регистрационную форму отправкой запроса на создание закладки.

Вот мой код jQuery.

$("form#login-form").submit(function(event) { 
     event.preventDefault(); 

     $.post('/account/authenticate_xhr', $(this).serialize(), function(data, textStatus, jqXHR) { 
console.log("posted authenticate"); 

      if (data['user_id']) { 
       // log in successful 
console.log("logged in!"+data['user_id']); 
       if (data['next_action']) { 
        // prepare and post next action 
console.log('next action!'); 
        var next_action = data['next_action']; 
        var controller = next_action['controller']; 
        var action = next_action['action']; 
        var data = next_action['data']; 

        $j.post('/' + controller + '/' + action, { data: data }, function(data, textStatus, jqXHR) { 
        }, "script"); 
       } 
      }; 
     }, "script"); 

console.log('ending'); 

    }); 

Когда я запускаю его, на консоли появляется ТОЛЬКО «финал». Я не могу выполнить код внутри запроса подлинности authenticate_xhr, пока кажется, что запрос выполнен правильно на задней панели. Но ответ authenticate_xhr показывает мне правый объект JSON ...

Что мне здесь не хватает?

ОБНОВЛЕНИЕ:

  1. Я последовал charlietfl предложение и заменить «сценарий» с «» JSON для вызова «/ счета/authenticate_xhr» и теперь получить первый пост работает нормально. Теперь мне нужно, чтобы выполнить мой ответ js.erb ...
  2. Хранится «сценарий» для второго запроса пост и добавленный escape_javascript в представлении js.erb
+1

Вы проверили инструменты firebug или chrome dev, чтобы узнать, выполняется ли запрос? Использует ли 'if (data ['user_id'])' eval значение true? – gideon

ответ

1

Вы устанавливаете dataType как script ... потребности json. Даже если запрос для jsonp, который обернут в функцию, вы все еще запрашиваете json

+0

OK ... теперь вы возвращаете html не json. удалите dataType, если это html .... jQuery будет по умолчанию использовать html-тип – charlietfl

+0

, если это скрипт внутри html, он по-прежнему html. То, что вы показали ранее, было html – charlietfl

+0

не устанавливать dataType – charlietfl