Facebook Connect showPermissionDialog обратный вызов срабатывает еще до того, как пользователь сможет увидеть диалог - PullRequest
1 голос
/ 07 февраля 2010

Я делаю интеграцию Facebook Connect для сайта, и когда пользователь входит в систему, мне нужно запросить некоторые разрешения, поэтому я использую FB.Connect.showPermissionDialog. Я использую его обратный вызов, чтобы увидеть, были ли предоставлены разрешения. Если они предоставлены, я хочу отправить форму. Вот как выглядит мой код:

$("#form3").live("submit", function() {
 FB.Connect.showPermissionDialog('email, offline_access', function(perms) {
    if (!perms) {
     location.href="http://www.mysite.com/logout/";
  return false;
   } else {
   save_session();
   }
 });
});

Проблема в том, что форма отправляется еще до того, как пользователь сможет увидеть диалоговое окно с разрешениями. Кто-нибудь видел это раньше?

1 Ответ

0 голосов
/ 20 марта 2010

Совсем недавно я сделал то же самое. Переместите кнопку из формы. Переместите его таким образом, чтобы щелкнув по нему, вы не отправите форму. Теперь используйте следующий код, чтобы запросить расширенные разрешения, а затем отправьте форму.

  1 var fb = {
  2   extendedPermissions: function () {
  3     $("#submit_button").click(function (event) {
  4       FB.Connect.showPermissionDialog("email,read_stream,publish_stream", function (perms) {
  6         if (!perms) {
  7           location.href="http://www.mysite.com/logout/";
  8         } else {
  9           $.post('/url_to_post_the_form', $('#form3').serialize(), function (data, textResponse) {
 10             window.location.replace(data.redirect);
 11           }, "json");
 12         }
 13       });
 14     });
 15   }
 16 };

Строка 4 гарантирует, что при нажатии кнопки пользователю будет показан диалог разрешения.

Строка 7 Если пользователь не дает разрешения, он перенаправляется на выход из системы.

Строка 9, в противном случае вы публикуете содержимое формы в том месте, куда вы хотите его отправить. Убедитесь, что он возвращает URL-адрес перенаправления в формате JSON, куда вы хотите, чтобы ваш пользователь приземлился, когда он дает вам разрешение и когда содержимое формы успешно публикуется.

Строка 10 фактически перенаправляет пользователя на URL, который появился как JSON в последнем пост-запросе AJAX.

НТН

...