除非我刷新页面,否则函数不会运行

时间:2016-05-06 07:17:32

标签: php json ajax facebook-login

我已经在我的网站上实现了Facebook登录,方法是从Facebook Developers网站复制JSON代码。我已经定制了该代码,添加了一个调用PHP文件的Ajax,其中包含一些函数,用于将Facebook返回的数据插入到我们的数据库中。

当用户点击"登录Facebook"按钮,一个名为 facebookLogin()的函数运行。在该函数内部,我有调用PHP代码的Ajax。除非我手动刷新页面,否则数据不会插入数据库。我试图用JavaScript函数自动刷新它,但它没有用。我已经搜索了一个解决方案,以避免手动刷新,但没有成功。

我在这里粘贴代码。这是具有所述功能的代码的摘录。

  function facebookLogin() { // función que devuelve datos de usuarios
console.log('Welcome!  Fetching your information.... ');
FB.api('/me?fields=name,email', function(response) {

        var nombreUsuario = JSON.stringify(response.name);
        nombreUsuario = nombreUsuario.replace(/\"/g, "");
        //document.getElementById("nombreUsuario").innerHTML = nombreUsuario;

        var emailUsuario = JSON.stringify(response.email);
        emailUsuario = emailUsuario.replace(/\"/g, "");

        var idFacebook = JSON.stringify(response.id);
        idFacebook = idFacebook.replace(/\"/g, "");
        var fotoPerfil = 'http://graph.facebook.com/' + idFacebook + '/picture?type=large';
        //document.getElementById("fotoPerfilUsuario").src = fotoPerfil;

        //me            Se va a la api de Facebook, y devuelve los valores que el usuario aprueba.
        //              En nuestro caso, los datos que usamos son los siguientes:

        //name          Devuelve el nombre.
        //email         Devuelve el email del usuario.
        //picture       Devuelve la foto de perfil del usuario.

        // ----------   EMPIEZA FUNCIÓN AJAX   ---------- //

        $.ajax({
            type: "POST",
            url: "/users/functions/pasardatosfb.php",
            async: false,
            data: { "nombreUsuario" :  nombreUsuario, "emailUsuario" : emailUsuario, "fotoPerfil" : fotoPerfil, "idFacebook" : idFacebook, "action" : "enviarDatosFb" },
            cache: false,
            success: function (data){
                console.log(data); // Printa los datos que se pasan a Datos Login; es decir, los INSERT MySQLi.
            }
        });
});}

这就是上面代码中通过Ajax调用的PHP代码:

<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/session_start.php'); // Incluimos el Session start.

if ($_POST['action'] == "enviarDatosFb"){
    $idFacebook = $_POST["idFacebook"];
    $nickUsuario = $_POST["nombreUsuario"];
    $emailUsuario = $_POST["emailUsuario"];
    $fotoPerfil = $_POST["fotoPerfil"];
    date_default_timezone_set("Europe/Madrid");
    $fechaRegistroUsuario = strftime( "%Y-%m-%d-%H-%M-%S", time() );
    $idPermisosUsuario = "1";
    $totalMonedasUsuario = "1001";
    $idEstadoCuenta = "1";

    $sql = "
    INSERT INTO dtUsuariosDAG (nickUsuario, emailUsuario, fechaRegistroUsuario, idPermisosUsuario, totalMonedasUsuario, idEstadoCuenta)
    VALUES  ('$nickUsuario', '$emailUsuario', '$fechaRegistroUsuario', '$idPermisosUsuario', '$totalMonedasUsuario', '$idEstadoCuenta')
    ";

    if ($connection->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $connection->error;
    }

    $sql2 = "
    SELECT idUsuario FROM dtUsuariosDAG
    ORDER BY idUsuario DESC LIMIT 1
    ";

    $result = $connection->query($sql2);
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $idUsuario = $row['idUsuario'];
        }
    }

    $sql3 = "
    INSERT INTO dtInformacionUsuarios (idUsuario, fotoUsuario)
    VALUES ('$idUsuario', '$fotoPerfil')
    ";

    if ($connection->query($sql3) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql3 . "<br>" . $connection->error;
    }

    $sql4 = "
    INSERT INTO dtLoginRedesSociales (idUsuario, idRedSocial, tipoRedSocial)
    VALUES ('$idUsuario', '$idFacebook', '1')
    ";

    if ($connection->query($sql4) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql4 . "<br>" . $connection->error;
    }

    //TOCA AQUI
    $sqlHistorialBonus = "SELECT fechaSuceso FROM dtHistorialMonedas
    WHERE idUsuario=$idUsuario AND idMotivo=5 ORDER BY fechaSuceso DESC
    LIMIT 1";


    $resultadoHistorialBonus = $connection->query($sqlHistorialBonus);
    $rowBonus = $resultadoHistorialBonus->fetch_assoc();


    $fechaUltimoBonus = date('d-m-Y', strtotime($rowBonus['fechaSuceso']));


    $_SESSION['fechaUltimoBonus'] = $fechaUltimoBonus;

    $_SESSION["nickUsuario"] = $nickUsuario;
    $_SESSION["email"] = $emailUsuario;
    $_SESSION["idFacebook"] = $idFacebook;
    $_SESSION['idPermisosUsuario'] = $idPermisosUsuario;
    $_SESSION['idUsuario'] = $idUsuario;

    mysqli_close($connection);

}?>

编辑:我在该按钮中调用了函数facebookLogin:

<fb:login-button scope="public_profile,email" onlogin="checkLoginState()" id="loginFb"></fb:login-button>

checkLoginState()函数在facebookLogin中调用:

  function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
      facebookLogin();
      location.reload();
    });

}

0 个答案:

没有答案