2012-02-09 146 views
2

我想使用AJAX獲取PHP腳本並將值作爲JSON返回。出於某種原因,我的腳本失敗了,我試圖找出問題所在。當我進入從數據庫中的值到地址欄,如:JSON PHP數據返回null

www.someaddress/post.php?kinaseEntry=aValue 

我得到一個JSON輸出像這樣:

{"kinaseSKU":null,"url":null,"molecularWeight":null,"tracerSKU":null,"antiSKU1":"antiSKU1","antiSKU2":"antiSKU2","bufferSKU":"bufferSKU","tracerConc":null,"assayConc":null} 

我的PHP文件看起來像這樣:

<?php 

//Include connection to database 
require_once 'connect.php'; 

$kinase = mysql_real_escape_string ($_POST["kinaseEntry"]); 

mysql_query('SET CHARACTER SET utf8'); 

$findKinase = "SELECT * FROM kbaData where cleanSKU = '" .$kinase. "' "; 

if ($result = mysql_query($findKinase)) { 

    $row = mysql_fetch_array($result, MYSQL_ASSOC); 

    $kinaseSKU = $row['cleanSKU']; 
    $url = $row['url']; 
    $molecularWeight = $row['molecularWeight']; 
    $tracerSKU = $row['tracerSKU']; 
    $antiSKU1 = $row['antiSKU1']; 
    $antiSKU2 = $row['antiSKU2']; 
    $bufferSKU = $row['bufferSKU']; 
    $tracerConc = $row['tracerConc']; 
    $assayConc = $row['assayConc']; 


    /* JSON ROW */ 
    $json = array ("kinaseSKU" => $kinaseSKU, "url" => $url, "molecularWeight" => $molecularWeight, "tracerSKU" => $tracerSKU, "antiSKU1" => $antiSKU1, "antiSKU2" => $antiSKU2, "bufferSKU" => $bufferSKU, "tracerConc" => $tracerConc, "assayConc" => $assayConc); 

} else { 

    /* CATCH ANY ERRORS */ 
    $json = array('error' => 'Mysql Query Error'); 
} 

/* SEND AS JSON */ 
header("Content-Type: application/json", true); 

/* RETURN JSON */ 
echo json_encode($json); 

/* STOP SCRIPT */ 
exit; 
?> 

我是否會以這種錯誤的方式去做?還是我做錯了?

編輯:這裏是我的jQuery/AJAX調用PHP腳本:

$(document).ready(function() { 

$('#kinaseEntry').change(function() { 

    var kinaseEntry = $('#kinaseEntry').val(); 
    var dataString = 'kinaseEntry' + kinaseEntry; 

    $('#waiting').show(500); 
    $('#message').hide(0); 
    alert(kinaseEntry); 

    //Fetch list from database 
    $.ajax({ 
     type : "POST", 
     url : "post.php", 
     datatype: "json", 
     data: dataString, 
     success : function(datas) { 
      alert("datas" + datas); 
     }, 
     error : function(error) { 
      alert("Oops, there was an error!"); 
     } 
    }); 
    return false; 
}); 
}); 
+0

定義:「我的腳本失敗」。 – sberry 2012-02-09 14:34:30

+0

你'var_dump($ row)'確定它不是全部NULL?否則,您的代碼看起來正確 – 2012-02-09 14:34:51

+0

@sberry失敗在問題標題 - JSON全部爲空值... – 2012-02-09 14:35:28

回答

0

首先,我不確定if (isset($_POST['kinaseEntry']))是否適用於您所顯示的內容。你顯示的URL是一個獲取請求,所以如果你想訪問該變量,你將不得不使用$_GET['kinaseEntry']。如果您需要執行POST,請將表單中的方法屬性更改爲<form method="POST">,這會爲您提供帖子變量。

+0

我在測試 – JPK 2012-02-09 14:46:21

+0

時確實刪除了isset功能。在將我的代碼與這裏提供的一些示例進行混合後,我更改的最後一件事是POST GET,它現在返回值,因爲它應該。感謝所有花時間回答我的問題的人 – JPK 2012-02-09 15:48:54

0

你的問題似乎是,有沒有真正的行從查詢返回。嘗試:

$result = mysql_query($findKinase); 
if ($result !== false && mysql_num_rows($result) > 0) { 
    // your code 
} 

$result在這種情況下false如果有查詢錯誤。如果沒有錯誤,則檢查是否有實際返回的行。如果有分別是多於0行返回,然後嘗試提取數據。

+0

不幸的是,這返回{「error」:「Mysql查詢錯誤」} – JPK 2012-02-09 15:04:36

+0

@JPK我不認爲這是不幸的,我認爲這意味着問題不在你認爲的那個地方。您現在需要調試您的實際查詢。 =) – Crontab 2012-02-09 15:14:41

1

即使返回0行,mysql_query函數也會返回一個真值。只有在發生數據庫錯誤時它纔會返回false。所以我相信它執行查詢並且沒有結果,所以JSON中有null值。嘗試使用mysql_num_rows:

$findKinase = "SELECT * FROM kbaData where cleanSKU = '" .$kinase. "' "; 

if ($result = mysql_query($findKinase)) { 
     $json = array('error' => 'Mysql Query Error'); 
}else{ 
    $num_rows = mysql_num_rows($result); 
    if($num_rows > 0){ 
     // Do sth with the results 
    }else{ 
     $json = array('error' => 'No results'); 
    } 
} 
+0

已嘗試此修復,不幸的是我得到> {「error」:「Mysql查詢錯誤」}返回 – JPK 2012-02-09 14:55:20

+0

因此,您在查詢中出現錯誤。您可以使用[mysql_error](http://php.net/manual/en/function.mysql-error.php)顯示錯誤。 – 2012-02-09 14:56:38

+0

對不起,這條消息是爲另一個成員,我會嘗試你的解決方案剛纔 – JPK 2012-02-09 15:05:12

0

是的,你回來的行數組,所以這不會像你所期望的那樣工作。這應該解決它,但我不認爲這是最好的方法(但我認爲它應該無論如何)。

$kinase = mysql_real_escape_string ($_POST["kinaseEntry"]); 

mysql_query('SET CHARACTER SET utf8'); 

$findKinase = "SELECT * FROM kbaData where cleanSKU = '" .$kinase. "' , LIMIT 0,1"; 

if ($result = mysql_query($findKinase)) { 

    $row = mysql_fetch_array($result, MYSQL_ASSOC); 

    $kinaseSKU = $row[0]['cleanSKU']; 
    $url = $row[0]['url']; 
    $molecularWeight = $row[0]['molecularWeight']; 
    $tracerSKU = $row[0]['tracerSKU']; 
    $antiSKU1 = $row[0]['antiSKU1']; 
    $antiSKU2 = $row[0]['antiSKU2']; 
    $bufferSKU = $row[0]['bufferSKU']; 
    $tracerConc = $row[0]['tracerConc']; 
    $assayConc = $row[0]['assayConc']; 


    /* JSON ROW */ 
    $json = array ("kinaseSKU" => $kinaseSKU, "url" => $url, "molecularWeight" => $molecularWeight, "tracerSKU" => $tracerSKU, "antiSKU1" => $antiSKU1, "antiSKU2" => $antiSKU2, "bufferSKU" => $bufferSKU, "tracerConc" => $tracerConc, "assayConc" => $assayConc); 

} else { 

    /* CATCH ANY ERRORS */ 
    $json = array('error' => 'Mysql Query Error'); 
} 

/* SEND AS JSON */ 
header("Content-Type: application/json", true); 

/* RETURN JSON */ 
echo json_encode($json); 

/* STOP SCRIPT */ 
exit;