2010-12-09 4 views
0

J'essaie de rationaliser mon système de connexion en utilisant ajax pour gérer de sauvegarder et de former des demandes au serveur. Je veux poster mes données de forme à une page de PHP, puis renvoyer vrai/faux et «pas assez de données» si les paramètres corrects n'ont pas été passés.

Mon problème est que ma requête AJAX n'envoie pas les données que je lui envoie.

Voici ma fonction JavaScript:

function confirm_login() 
{ 
    val_UName = document.login_form.username.value; 
    val_Pwd = document.login_form.password.value; 

    var result = null; 
    var scriptUrl = "login_confirm.php"; 
    $.ajax({ 
    url: scriptUrl, 
    type: 'post', 
    data: ({username : val_UName, password : val_Pwd}), 
    dataType: 'html', 
    async: false, 
    success: function(data) { 
     result = data; 
    } 
    }); 
    result = result.split('|'); 
    if(result[1] == 'true') 
    window.location = "index.php"; 
    else 
    alert('Could not log you in!\n\n'+result[0]); 
} 

Cette fonction est appelée dans l'événement onclick du bouton soumettre le formulaire. Maintenant, j'ai utilisé les outils de débogage dans Chrome et je sais que val_UName et val_Pwd obtiennent les valeurs de formulaire. Il est donc sans aucun doute une rupture entre ici et le login_confirm.php

Juste pour être complet bien, voici ce qui se passe dans login_confirm.php (je suis parti les lignes qui se connectent à la DB et la fermeture de la connexion):

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

if($username == '' || $password == '') 
     echo 'Not Enough Data|'; 

$login_query = "SELECT * FROM users WHERE u_name = '$username' AND pwd = '$password'"; 
$result = mysql_query($login_query); 
$result_rows = mysql_num_rows($result); 

if($result_rows > 0) 
{ 
    session_start(); 
    $row = mysql_fetch_assoc($result); 
    $_SESSION['loggedin'] = true; 
    $_SESSION['uname'] = $row['u_name']; 
    $_SESSION['uID'] = $row['pkid']; 
    $_SESSION['email'] = $row['email']; 
    $_SESSION['roleID'] = $row['fk_roleid']; 
    echo 'true'; 
} 
else 
{ 
    echo 'false'; 
} 

Quelqu'un sait ce qui se passe ici ou a déjà vu quelque chose comme ça?

PS. J'ai même essayé de changer en utilisant GET et cela ne fonctionne toujours pas ...

+0

Quelles données recevez-vous? –

+0

Ma page PHP ne retournera 'Pas assez de données' si les variables $ username ou $ password sont des chaînes vides, donc none. – CrowderSoup

+1

Prenez l'outil appelé Fiddler. Il vous permettra de voir les données de demande et les données de réponse pour tous les appels effectués. Quels que soient les résultats visibles dans la requête, les données confirmeront la réception de la page PHP. –

Répondre

4
result = result.split('|'); 
    if(result[1] == 'true') 
    window.location = "index.php"; 
    else 
    alert('Could not log you in!\n\n'+result[0]); 

est exécuté avant le retour du rappel. Essayez de mettre cette logique dans le rappel de succès ou définissez une fonction de réussite avec cette logique à l'intérieur.

+0

L'OP a défini 'async: false', donc en fait ça devrait marcher, n'est-ce pas? –

+0

Merci! C'était ça. – CrowderSoup

+0

@felix il ne devrait vraiment pas être async false dans ce cas. Je crois que async false est utilisé pour mettre en file d'attente les requêtes Ajax et les traiter dans l'ordre. Sinon, les rappels seront appelés hors service. N'utilisez async false que si c'est absolument nécessaire. – troynt

0

N'enveloppez pas vos données entre parenthèses. Juste le {} suffira.

+1

Vérifiez l'API jquery: http://api.jquery.com/jQuery.ajax/ ils utilisent des parenthèses, ils sont parfaitement bien. –

+0

Assez juste - je n'ai jamais vu ça. – Pickle

+0

Cela m'a paru bizarre aussi, j'ai dû le vérifier pour m'assurer que c'était valide. –

2

Le code sous la requête ajax n'attendra pas que la requête ajax soit terminée avant d'être exécutée. Donc, je pense que votre requête ajax fonctionne, mais rien ne se passe avec les données car ce morceau de code a déjà été exécuté.

Ma suggestion est:

function confirm_login() 
{ 
    val_UName = document.login_form.username.value; 
    val_Pwd = document.login_form.password.value; 

    var scriptUrl = "login_confirm.php"; 
    $.ajax({ 
    url: scriptUrl, 
    type: 'post', 
    data: ({username : val_UName, password : val_Pwd}), 
    dataType: 'html', 
    async: false, 
    success: function(data) { 
     runCode(data); 
    } 
    }); 

    function runCode(var result){ 
     result = result.split('|'); 
     if(result[1] == 'true') 
     window.location = "index.php"; 
     else 
     alert('Could not log you in!\n\n'+result[0]); 
     } 
    } 
} 

Edit: fonction ne doit pas être whithin l'autre fonction, mais je pense que vous pouvez fixer vous-même.

Questions connexes