【发布时间】:2017-05-08 06:35:59
【问题描述】:
我在 AJAX 解析我正在创建的 Web 服务中的 JSON 数组时遇到了问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的 web 服务返回的结果。
尽管知道我的数据库查询有结果,但我在 Chrome 的控制台中收到一条错误消息,指出“无法读取未定义的长度属性”。
在寻找答案几天后,我仍然无法弄清楚为什么会出现控制台错误。
感谢您的帮助! :)
function ajaxrequest(e)
{
var r = $('#region').val();
var t = $('#type').val();
console.log(r,t);
$.ajax('https://URL...../.../POI/POI_LOOKUP.php',
{ type: 'GET',
data: 'type='+t+'®ion='+r+'&format=json',
success: onSuccess }
);
}
function onSuccess(data,status,xmlHTTP)
{
var html = "<table><th>name</th><th>type</th><th>country</th><th>region</th>";
for(var i=0; i<data.length; i++)
{
html = html + '<tr><td>' + data[i].name + '</td>' + '<td>' + data[i].type + '</td>' + '<td>' + data[i].country + '</td>' + '<td>' + data[i].region + '</td></tr>';
}
html = html + '</table>';
$('#results').html(html);
console.log(data);
console.log(status);
}
这是我的 PHP 搜索并返回所有结果:
IF ($type == "any" && !isset($region)) /* Search DB for all types of POI for all regions*/
{
$statement = $conn->prepare("SELECT * FROM pointsofinterest;");
$statement->execute();
$row = $statement->fetch();
if ($row == false)
{
header("HTTP/1.1 204 No Content");
}
else
{
$allResults = array();
while($row != false)
{
$allResults[] = $row;
$row = $statement->fetch(PDO::FETCH_ASSOC);
}
echo json_encode($allResults);
}
}
【问题讨论】:
-
如果
console.log(data);以onSuccess开头,你会看到什么? -
未捕获的类型错误:无法读取 Object.onSuccess [as success] (POI_HOME.html:35) at c (jquery.min.js:4) at Object.fireWith [ as resolveWith] (jquery.min.js:4) at k (jquery.min.js:6) at XMLHttpRequest.r (jquery.min.js:6) onSuccess @ POI_HOME.html:35 c @ jquery.min.js :4 fireWith @jquery.min.js:4 k @ jquery.min.js:6 r @ jquery.min.js:6
-
当我知道 SQL 查询工作正常时,基本上没有数据。
-
我可以看到您尚未解码从 Web 服务返回的 JSON。您需要在 jQuery Ajax 调用中指定 dataType: "json"。或者您需要在 onSuccess 函数的第一行执行类似 var jsonData = JSON.parse(data) 的操作。
-
其他查询的运行取决于用户在前端输入的内容,但是如果没有返回结果也会出现此错误。所以它在一定程度上有效,但对于第一个查询(已发布)和没有返回结果的查询,似乎我的 Web 服务正在编码和空 JSON 数组?
标签: javascript php mysql json ajax