我无法尝试将结果从PHP脚本返回到我的HTML / Jquery应用程序中。
目前,我正在尝试连接到服务器,如下所示:
function getDatabaseRows()
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
HandleResponse(xmlHttp.responseText);
}
}
xmlHttp.open("POST", "myDomain.com/subDirectory/getRowCounts.php", true);
xmlHttp.send(null);
}
我的响应处理程序是:
function HandleResponse(response)
{
alert(response.length);
if(response.length != 0)
maxArray = JSON.parse(response);
storage.set('currentID', maxArray);
}
目前,每当我运行代码时,getDatabaseRows()
始终会调用HandleResponse(response)
。问题是response.length
总是等于0
。
PHP脚本只是从数据库中收集最大行数并返回行计数:
<?php
$rowCounts = [];
$dbhost = 'host';
$dbuser = 'host';
$dbpass = 'host';
$con = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
mysql_select_db("host") or die(mysql_error());
$sql = "SELECT MAX(TID) AS MaxTID FROM TransData";
$results = mysql_query($sql, $con);
$transRow = mysql_fetch_array($results);
$maxTrans = $transRow['MaxTID'];
$sql = "SELECT MAX(FID) AS MaxFID FROM FullData";
$results = mysql_query($sql, $con);
$fullRow = mysql_fetch_array($results);
$maxFull = $fullRow['MaxFID'];
$sql = "SELECT MAX(SID) AS MaxSID FROM SalamanderData";
$results = mysql_query($sql, $con);
$salamanderRow = mysql_fetch_array($results);
$maxSal = $salamanderRow['MaxSID'];
$sql = "SELECT MAX(OID) AS MaxOID FROM OthersData";
$results = mysql_query($sql, $con);
$othersRow = mysql_fetch_array($results);
$maxOther = $othersRow['MaxOID'];
array_push($rowCounts, $maxTrans, $maxFull, $maxSal, $maxOther);
echo json_encode($rowCounts);
mysql_close($con);
?>
当我将浏览器直接指向脚本时,它会回显正确的行数。我只是在尝试通过AJAX获取数据时遇到了麻烦。
编辑:
好的,我终于连接了脚本,它与跨域脚本问题有关。现在整理好了。
新问题:
function HandleResponse(response)
{
if(response.length != 0)
maxArray = JSON.parse(response);
storage.set('currentID', maxArray);
}
HandleResponse在解析JSON Error trying to parse '<'
时抛出错误,所以我认为它与Array编码的方式有关。我该如何解决这个问题,并弄清楚如何解析该数组?
答案 0 :(得分:0)
我会检查以下连接方法。
http://api.jquery.com/jQuery.get/
这将解决您的所有问题并清理您的代码
这是我旧代码之一
的示例 $.ajax({
data: "id=" + value,
type: "POST",
url: "unlock.php",
success: function (data) {
if (data == 1 || data == true) {
var result = true;
} else {
var result = false;
}
}
});
答案 1 :(得分:0)
这是我可以使用的最简单的jQuery JavaScript(这使用GET方法):
function getDatabaseRows()
{
$.getJSON('myDomain.com/subDirectory/getRowCounts.php', function(data) {
console.log(data);
});
}
http://api.jquery.com/jQuery.getJSON/
上的文档使用foreach {}
和mysql_result()
对PHP进行了一些增强,但您可能需要查看PHP的mysqli
类以获得更具面向未来的解决方案。
$rowCounts = array();
$dbhost = 'host';
$dbuser = 'host';
$dbpass = 'host';
$dbase = 'host';
$fields = array(
'MaxTID' => array('tab' => 'TransData', 'col' => 'TID'),
'MaxSID' => array('tab' => 'FullData', 'col' => 'SID'),
'MaxFID' => array('tab' => 'SalamanderData', 'col' => 'FID'),
'MaxOID' => array('tab' => 'OthersData', 'col' => 'OID')
);
$con = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
mysql_select_db($dbase, $con) or die(mysql_error());
foreach ($fields as $id => $info) {
$sql = "SELECT MAX({$info['col']}) FROM {$info['tab']}";
$result = mysql_query($sql, $con);
if (!$result) die('Could not query:' . mysql_error());
$rowCounts[$id] = mysql_result($result, 0);
}
echo json_encode($rowCounts);
mysql_close($con);
此代码适用于GoDaddy托管网站。为了记录,这是我的第一个Stack Overflow答案。请告知:)