2012-09-12 50 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