2012-09-12 4 views
-1

EDIT: Le problème est que j'ai essayé d'appeler la fonction comme j'aurais pu appeler une fonction lors de l'utilisation d'un framework. Et, je n'ai même pas pris la peine de mentionner des choses très importantes telles que je n'utilise pas de cadre avec celui-ci.ajax php json renvoie null

Comme l'a souligné mon collègue, ce ici devrait être en mesure d'aider. Le problème: J'ai essayé de nombreuses façons suggérées par d'autres utilisateurs mais json renvoie toujours NULL ou vide. Voici mon code et les lignes que j'ai commentées sont celles que j'ai essayées mais qui ont échoué. Maintenant, je sais qu'il y a eu des messages comme le mien avant, mais aucun de ceux-là n'a fonctionné pour moi. Merci à tous d'avance.

EDIT: J'utilise le chrome et quand je F12, goto réseau, je peux voir que la fonction login() a été accédée et les données que j'ai passées sont également là. Mais, quand j'ai essayé d'imprimer une chaîne et/ou die()/exit(), la réponse me donne toujours 'Cette demande n'a pas de données disponibles'. Qu'est-ce que ça veut dire?

J'ai d'abord testé ce sans faire des requêtes et renvoie toujours NULL. Je suppose que ma question a été rejetée parce qu'il semblait y avoir une erreur dans ma requête, alors je voulais juste l'éclaircir. J'ai traité avec celui-ci depuis 2 jours maintenant et j'ai essayé à peu près tout et je suis sûr que ce n'est pas la question.

public static function login() 
{ 
    //  header("Content-Type: application/json"); 
    //  header("Content-Type: text/javascript"); 

    $response->msg = ''; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $hashed = hash('md5', $password); 
    $query = mysql_query("select * from tbl_user where username = '$username' and password = '$hashed'"); 
    $result = mysql_fetch_object($query); 

    if(mysql_num_rows($result) > 0) 
    { 
     $response->msg = 1; 
     $response->username = $username; 

    //   $response['msg'] = 1; 
    //   $response['username'] = $username; 

     echo json_encode($response); 
    } 
    else 
    { 
    //   $response['msg'] = 0; 
     $response->msg = 0; 
     echo json_encode($username); 
    } 
} 

Javascript

$("#btn_submit").click(function(){ 

    var username = $("#txtusername").val(); 
    var password = $("#mypassword").val(); 

    $.ajax({ 
     url: base_url + 'includes/main.php/login', 
     data: { username: username, password: password }, 
        type: 'post', 
    //   async:false, 
     dataType: 'json', 
     success: function(data) 
     { 
      console.log(data); 
     } 
    }); 
}); 


    // $('#btn_submit').click(function() { 
    //  var username = $("#txtusername").val(); 
    //  var password = $("#mypassword").val(); 
    //  
    //  $.getJSON(base_url + 'includes/main.php/login', 
    //   { username: username, password: password }, 
    //  function(json) { 
    //   console.log(json); 
    //  }); 
    // }); 


    // $('#btn_submit').click(function() { 
    //  var username = $("#txtusername").val(); 
    //  var password = $("#mypassword").val(); 
    // 
    //  $.post(base_url + 'includes/main.php/login', 
    //   {username: username, password: password}, 
    //  function(r) { 
    //   console.log(r); 
    //  }, "json"); 
    // }); 
+0

vous avez essayé avec 'header ("Content-Type: application/json")' dans le php ou en supprimant 'dataType: « json'' en JavaScript? –

+0

Oui, j'ai essayé les deux. – esandrkwn

Répondre

0

Edit:

pourrait également être question avec AJAX envoyé comme obtenir l'origine du script PHP à l'échec:

$.ajax({ 
    url: base_url + 'includes/main.php/login', 
    data: { username: username, password: password }, 
//   async:false, 
    type: 'post', 
    dataType: 'json', 
    success: function(data) 
    { 
     console.log(data); 
    } 
}); 

On dirait que vous pourriez Vous avez une erreur dans votre requête ici:

$query = mysql_query("select * from tbl_user where username = $username and password = $hashed"); 

Le nom d'utilisateur et mot de passe de $ de $ doivent être entre guillemets simples:

$query = mysql_query("select * from tbl_user where username = '$username' and password = '$hashed'"); 

Je devine que la raison pour laquelle vous obtenez nulle est une erreur est générée en silence.

Essayez d'ajouter un ou mourir() après votre requête:

$query = mysql_query("select * from tbl_user where username = $username and password = $hashed") or die('Query error'); 
+0

Je suis désolé que j'ai oublié de mentionner que j'ai d'abord essayé le code sans faire de requêtes. Merci d'avoir signalé cela, mais mon problème n'a rien à voir avec ça. – esandrkwn

+0

Il est également tout à fait possible que vous ayez besoin de définir le "type" pour que votre $ .ajax soit POST comme la valeur par défaut est get. Voir la modification pour la mise à jour de la réponse pour le changement javascript. – endyourif

+0

Fait aussi celui – esandrkwn

1

Je pense que ce pas un problème à propos de JSON. Votre code ne sortira probablement pas à cause d'une erreur, et une erreur de base de données n'est généralement pas rapportée par php explicitement, la solution de endyourif devrait résoudre votre problème.

1

Pour autant que je comprends la question, et vous ne précisaient pas que vous avez utilisé des cadres, vous essayez d'appeler la méthode php par le congé url AJAX

ce si le login() est une méthode de commande

url: base_url + 'includes/main.php/login', 

Mais vous ne pouvez pas faire de cette façon, essayez le

suivant

javascript

$("#btn_submit").click(function(){ 

    var username = $("#txtusername").val(); 
    var password = $("#mypassword").val(); 

    $.ajax({ 
     url: base_url + 'includes/main.php', 
     data: { action:'login', username: username, password: password }, 
     type: 'post', 
     dataType: 'json', 
     success: function(data) 
     { 
      console.log(data); 
     } 
    }); 
    return false; 
}); 

en php

if(isset($_POST['action']) && $_POST['action'] == 'login') { 
    login(); 
} 

function login() 
{ 
    header("Content-Type: application/json"); 

    $response->msg = ''; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    // Do the rest ............ 

} 
+0

Merci pour votre réponse. Je pensais maintenant que je n'avais pas suivi certaines règles PHP OOP avec la façon dont j'avais appelé la fonction. Cette connexion() est en fait dans une classe Main. C'est la première fois que je fais de la POO sans utiliser de framework d'où ce problème. Je vais maintenant coller à l'aide de frameworks, puis peut-être étudier plus tard pure PHP OOP? Quoi qu'il en soit, je devrais supprimer ce fil. – esandrkwn

+0

Je vous aurais mis en colère parce que vous étiez près de comprendre où le problème était exactement. Mais je préférerais ne pas mettre cela comme accepté pour des raisons que cela pourrait induire en erreur d'autres personnes puisque le problème n'était pas sur la partie js de mon code. – esandrkwn