2013-08-07 3 views
0

Я использую facebook API для моего проекта и получать некоторые данные следующим образом в варе mydataзначение переменных Retriev в функции яваскрипта

if (response.status === "connected") 
     { 
      LodingAnimate(); //Animate login 
      FB.api('/me?fields=movies,email', function(mydata) { //-- 
      console.log(mydata); 
       if(data.email == null) 
       { 
       alert("You must allow us to access your email id!"); 
       ResetAnimate(); 
      } 
    } 

Я не имеют никаких проблем с этим кодом. Но я хочу отправить эти данные с помощью вызова ajax для обработки и вставки в базу данных.

Мой Аякса вызов:

function AjaxResponse() 
{ 
    var send=document.ge(mydata)  **//Here I want to fetch mydata from previous code** 
    var datas = document.elements['id'].value; 
    var s = 'connect=1'; 
    $.ajax({ 
    type: "POST", 
    url: "process_facebook.php", 
    data: s,send     **//Is this correct way to send s and send togather? I have tried with only 's' which works fine but dont know about both togather** 
    }).done(function(result) { 
    $("#fb-root").html(result); 
    }); 
    } 

Может кто-то пожалуйста помочь, как извлечь MYDATA в JavaScript функции и просмотр кода.

+0

Просто вызовите 'AjaxResponse' внутри обратного вызова' FB.api' и передайте ему 'mydata'. Конечно, вы также должны определить 'AjaxResponse', чтобы принять аргумент. –

ответ

1

Поскольку API-интерфейс Facebook, который вы делаете, является асинхронным, вы не можете не вернуть значение из вашей функции ge.

Вместо этого используйте обратный вызов, как и Facebook, и все остальные. Смотри ниже.

Отдельно ответ на второй несвязанный вопрос, скрытый в фрагменте кода, «нет, это не то, как вы это делаете». Я дал вам указатель на то, как это сделать ниже.

function AjaxResponse() 
{ 
    // Callback here----v arg ---v 
    document.ge(mydata, function(send) { 
     var datas = document.elements['id'].value; 
     $.ajax({ 
      type: "POST", 
      url: "process_facebook.php", 
      data: { 
       connect: 1, 
       paramname: mydata  // <=== I don't know what the name of this param is 
      } 
     }).done(function(result) { 
     $("#fb-root").html(result); 
    }); 
} 

..и есть код вызвать функцию обратного вызова, когда вызов Facebook называет его обратного вызова.

function ge(data, callback) { 
    // ... 
    if (response.status === "connected") { 
     LodingAnimate(); //Animate login 
     FB.api('/me?fields=movies,email', function (mydata) { //-- 
      console.log(mydata); 
      if (data.email == null) { 
       alert("You must allow us to access your email id!"); 
       ResetAnimate(); 
      } 
      else { 
       callback(data); // <=== Trigger the callback 
      } 
     } 
     // ... 
    } 
    // ... 
} 
+0

Спасибо большое приятель, но теперь я получаю эту ошибку - 'ReferenceError: LodingAnimate не определен' – user123

+0

Я действительно не знал концепции, которую вы сказали! – user123

+0

@ Каримхан: Это не было бы связано с этим вопросом. Вам просто нужно убедиться, что функция находится в области. Изменения, которые я сделал выше, должны повлиять на то, имеет ли он область действия этого кода. –