javascript - 控制台错误 - 解析 AJAX JSON 解析

标签 javascript php mysql json ajax

我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。

尽管知道我的数据库查询有结果,但我在 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+'&region='+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);
        }
    }

最佳答案

理想情况下,如果没有结果,您应该传回空结果,让 Javascript 决定要做什么(向用户显示友好的消息)。我还没有对此进行测试,这只是为了提供指导,请注意。

PHP

if ($type == "any" && !isset($region)) /* Search DB for all types of POI for all regions*/
{
        $statement = $conn->prepare("SELECT * FROM pointsofinterest;");
        $statement->execute();
        $results = $statement->fetchAll();
        if (count($results)!=0){
            echo json_encode($results);
        } else {
            header("HTTP/1.1 204 No Content");
        }
}

JavaScript

您可能希望单独处理 204 响应:How to handle a 204 response in jquery ajax? .下面的代码假定您可能会收到一个空的 JSON 响应。

function onSuccess(data,status,xmlHTTP)
{
    if (data.length==0) {
       alert("Friendly user message"); 
       return;
    }
    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);
}

关于javascript - 控制台错误 - 解析 AJAX JSON 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286461/

相关文章:

javascript - 文本框值未更新

javascript - 如何在 JavaScript 中生成有序的字符列表?

php - google sheets 将数据附加到 sheet api 返回 401 身份验证错误

php - JSON 编码 MySQL 结果

mysql - SQL 选择特定日期和附加字段过滤器之间的数据

javascript - 如何延迟 .keyup() 处理程序直到用户停止输入?

javascript - SharePoint 2013 在显示窗体中打开文档

javascript - 使用 html 和 php 的动态下拉列表

php - 无法在数据库 $count 中写入数据!= 1

mysql - 将数据添加到链接表 - MySQL