[英]JSON PHP data returning null
我正在嘗試使用AJAX提取PHP腳本並將值作為JSON返回。 由於某種原因,我的腳本失敗,並且我試圖找出問題所在。 當我從數據庫向地址欄中輸入一個值時,例如:
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行, mysql_query
函數也會返回true值。 僅當發生數據庫錯誤時,它才返回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');
}
}
您的問題似乎是查詢實際上沒有返回任何行。 嘗試:
$result = mysql_query($findKinase);
if ($result !== false && mysql_num_rows($result) > 0) {
// your code
}
如果查詢中存在錯誤,則$result
在這種情況下為false
。 如果沒有錯誤,請檢查是否實際返回了行。 如果有返回大於0的行, 然后嘗試提取數據。
首先,我不確定if (isset($_POST['kinaseEntry']))
是否適用於您所顯示的內容。 顯示的URL是一個get請求,因此,如果要訪問該變量,則必須使用$_GET['kinaseEntry']
。 如果需要進行POST,請將表單中的method屬性更改為<form method="POST">
,這將為您提供post變量。
是的,您要返回一個行數組,因此這實際上並沒有達到您期望的效果。 這應該可以解決它,但是我不認為這是最好的方法(但是我認為它仍然應該起作用)。
$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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.