Вы должны поместить вызов FB.ui
в обратный вызов AJAX.
$('.share_button').live('click', function(e) {
$('#player').fadeOut('slow');
var share_id = $(this).attr('id');
$.ajax({
type: 'GET',
url: '/youtube.php',
data: 'share=' + share_id,
success: function(data) {
//$('#params').html(data);
//params = $('#params').html();
param = data.split('--');
share_title = param[0];
share_description = param[1];
share_picture = param[2];
share_views = param[3];
FB.ui({
method: 'feed',
name: share_title,
link: 'http://www.facebook.com',
picture: share_picture,
caption: share_views,
description: share_description
}, function(response) {
$('#player').show('slow');
});
}
});
e.preventDefault();
});
AJAX асинхронный. Вызов $.ajax
возвращает до выполнения HTTP-запроса (т.е. до выполнения обратного вызова success
), и выполнение программы продолжается. Это означает, что в этой ситуации
- Ваш инициирует запрос AJAX через
$.ajax
- Вы звоните
e.preventDefault()
- Вы звоните
FB.ui
- Через некоторое время позже AJAX-запрос завершается, и
share_title
заполняется.
К вашему сведению, вы также должны объявить, что вы переменные; иначе вы делаете их неявные глобалы, которые являются плохими ;
$('.share_button').live('click', function(e) {
$('#player').fadeOut('slow');
var share_id = $(this).attr('id');
var share_title;
var share_... // do all your other share_*'s here as well.
$.ajax({
type: 'GET',
url: '/youtube.php',
data: 'share=' + share_id,
success: function(data) {
//$('#params').html(data);
//params = $('#params').html();
param = data.split('--');
share_title = param[0];
share_description = param[1];
share_picture = param[2];
share_views = param[3];
FB.ui({
method: 'feed',
name: share_title,
link: 'http://www.facebook.com',
picture: share_picture,
caption: share_views,
description: share_description
}, function(response) {
$('#player').show('slow');
});
}
});
e.preventDefault();
});