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

Javascript 控制台错误-解析AJAX JSON解析,javascript,php,mysql,json,ajax,Javascript,Php,Mysql,Json,Ajax,我在AJAX解析来自我正在创建的Web服务的JSON数组时遇到了一个问题。我的前端是一个简单的ajax和jquery组合,用于显示我正在创建的web服务返回的结果 我在Chrome的控制台中收到一个错误,声明“无法读取undefined的length属性”,尽管知道我的数据库查询有结果 在寻找了几天的答案之后,我仍然不明白为什么会出现控制台错误 谢谢你的帮助!:) 功能ajaxrequest(e) { var r=$('#region').val(); var t=$('#type').va

我在AJAX解析来自我正在创建的Web服务的JSON数组时遇到了一个问题。我的前端是一个简单的ajax和jquery组合,用于显示我正在创建的web服务返回的结果

我在Chrome的控制台中收到一个错误,声明“无法读取undefined的length属性”,尽管知道我的数据库查询有结果

在寻找了几天的答案之后,我仍然不明白为什么会出现控制台错误

谢谢你的帮助!:)

功能ajaxrequest(e)
{	
var r=$('#region').val();
var t=$('#type').val();
控制台日志(r,t);
$.ajax('https://URL...../.../POI/POI_LOOKUP.php',
{type:'GET',
数据:'type='+t+'®ion='+r+'&format=json',
成功:onSuccess}
);
}
函数onSuccess(数据、状态、xmlHTTP)
{
var html=“nametypecountryregion”;

对于(var i=0;i理想情况下,如果没有结果,您应该传回空结果,并让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响应:。下面的代码假定您可能收到一个空的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);
}
成功时的函数(数据、状态、xmlHTTP) { if(data.length==0){ 警报(“友好用户信息”); 返回; } var html=“nametypecountryregion”;
对于(var i=0;i理想情况下,如果没有结果,您应该传回空结果,并让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响应:。下面的代码假定您可能收到一个空的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);
}
成功时的函数(数据、状态、xmlHTTP) { if(data.length==0){ 警报(“友好用户信息”); 返回; } var html=“nametypecountryregion”;

对于(var i=0;i如果您在
onSuccess
的开始处
console.log(data);
您会看到什么?未捕获类型错误:无法读取Object.onSuccess[as success](POI_HOME.html:35)中未定义的属性'length',在c(jquery.min.js:4)中,在Object.fireWith[as resolveWith](jquery.min.js:4)中,在k(jquery.min.js:6)中在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。或者您需要指定,数据类型:“JSON”,或者您需要在onSuccess函数的第一行执行var jsonData=JSON.parse(data)之类的操作。其他查询的运行取决于用户在前端输入的内容,但是如果没有返回结果,也会出现此错误。因此,除了第一个查询(已发布)之外,它在一定程度上是有效的如果在
onSuccess
的开始处使用
console.log(data);
会看到什么?未捕获类型错误:无法读取c(jquery.min.js:4)中Object.onSuccess[as success](POI_HOME.html:35)处未定义的属性'length'在XMLHttpRequest.r(jquery.min.js:6)的k(jquery.min.js:6)的Object.fireWith[as resolveWith](jquery.min.js:4)onSuccess@POI_HOME.html:35 c@jquery.min.js:4 fireWith@jquery.min.js:4 k@jquery.min.js:6当我知道SQL查询工作正常时,基本上没有数据。我可以看到您还没有解码从web服务返回的JSON。或者您需要指定,数据类型:“JSON”,或者您需要在onSuccess函数的第一行执行var jsonData=JSON.parse(data)之类的操作。其他查询的运行取决于用户在前端输入的内容,但是如果没有返回结果,也会出现此错误。因此,除了第一个查询(已发布)之外,它在一定程度上是有效的如果没有返回结果,那么我的web服务似乎正在编码,JSON数组为空?感谢各位的回复,非常感谢。为了向用户显示消息,我将使用标题信息Guillermo。由于这是一个web服务,我正在创建的客户机将使用标题信息显示他们自己的自定义消息。我尝试了您发布的代码,但没有成功,可能是因为没有声明数组?其想法是即使没有结果也始终返回有效的JSON。fetchAll()即使没有行,也应始终返回数组:。如果希望发送204响应,可以先检查长度。我将修改我的答案。当然,您必须在Ajax调用中处理204响应。我理解Guillermo。检查$region变量是否未设置似乎不会产生任何结果,我将其编辑为just检查它是否为空($region==“”),我现在得到了结果。我尝试了您对我的web服务的建议(PHP),但所有结果都返回为未定义。我现在面临的挑战是发送一个空的有效JSON响应以停止“无法读取长度”当没有结果返回时,我收到控制台错误。感谢大家抽出时间来帮助我!非常感谢!感谢各位的回复,非常感谢。为了向用户显示消息,我将使用标题信息Guillermo。由于这是一个Web服务,我正在创建的客户端将使用标题信息来显示它们r自己的自定义消息。我尝试了您发布的代码,但没有成功,可能是因为没有说明数组?想法是即使没有结果也始终返回有效的JSON。fetchAll()应始终返回数组,即使没有行:。如果您希望发送204响应,可以先检查长度。我将