2012-09-12 167 views
-1

编辑:问题是我试图调用函数时我可能调用函数时使用框架的方式。而且,我甚至懒得提及一些非常重要的东西,比如我没有使用这个框架。ajax php json返回null

正如我的同事指出的那样,这里应该能够提供帮助。 http://www.php.net/manual/en/language.oop5.basic.php

问题: 我试过了其他用户建议的许多方法,但json仍然返回NULL或空白。这里是我的代码,我已经注释掉的那些代码是我尝试过但失败的代码。现在我知道以前有过这样的帖子,但没有人为我工作。谢谢大家提前。

编辑:我使用铬,当我F12,转到网络,我可以看到函数login()被访问,我传递的数据也在那里。但是,当我试图打印一个字符串和/或die()/ exit()时,响应仍然给我'这个请求没有可用的数据'。这是什么意思?

我最初测试了这个没有做任何查询,仍然返回NULL。我猜我的问题被拒绝了,因为我的查询似乎有错误,所以我只是想澄清。我一直在处理这个问题已经有2天了,我已经尝试了几乎所有的东西,我确定这不是问题。

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

你尝试过用'标题( “内容类型:应用/ JSON”);'在PHP或通过去除'数据类型:在JavaScript“json''? –

+0

是的,我已经尝试了两个。 – esandrkwn

回答

0

编辑:

也可能会被发送与AJAX问题作为获取引起的PHP脚本失败:

$.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); 
    } 
}); 

看起来你可能在此查询中有错误:

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

的$ username和$ password需要用单引号:

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

我猜你得到空的原因是正在悄悄产生错误。

尝试查询后添加或死亡():

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

对不起,我忘了提及我最初尝试过的代码而没有做任何查询。谢谢你指出,但我的问题与它无关。 – esandrkwn

+0

也很有可能你需要设置你的$ .ajax的“type”为POST,因为默认值是get。请参阅编辑javascript更改的更新答案。 – endyourif

+0

完成那一个也 – esandrkwn

1

我觉得这不是JSON问题。你的代码输出没有任何可能是因为错误,并且数据库错误通常不是由php明确报告的,endyourif的解决方案应该可以解决你的问题。

1

据我了解的问题,而你没有指定你曾经使用过任何框架,你试图通过AJAX URL来调用PHP方法

离开这个如果login()是一个控制器方法

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

但你不能做到这一点的方式,请尝试以下

在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; 
}); 

在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

谢谢你的回应。我现在认为我没有按照我调用函数的方式遵循一些PHP OOP规则。这个login()实际上在Main类中。这是我第一次在没有使用框架的情况下进行OOP,因此存在这个问题。我现在将坚持使用框架,然后可能以后学习纯PHP OOP?无论如何,我应该删除这个线程。 – esandrkwn

+0

我喜欢你,因为你已经接近了解问题的确切位置。但我宁愿不将其设置为接受,因为这可能会误导其他人,因为问题不在我的代码的js部分。 – esandrkwn