【问题标题】:Unable to parse json encoded values from php into JSON parse in javascript/jquery无法将 json 编码值从 php 解析为 javascript/jquery 中的 JSON 解析
【发布时间】:2017-09-16 13:25:56
【问题描述】:

您好,我正在尝试将数据库中的数据结果解析到我的 html 视图中。我不太确定我在做什么有什么问题。

这是我的代码:

function display($dbhandler){

$sql = "SELECT * FROM users";
    foreach($dbhandler->query($sql) as $row){
        $data = array('id'=>$row['id'], 
                         'email'=> $row['email'], 
                         'name'=> $row['name']
                         );

        echo json_encode($data);        

    }

}

这会给我一个输出:

{"id":"1","email":"Email 1","name":"Name 1"}{"id":"2","email":"Email 2","名称":"名称 2"}'

现在,当我返回并尝试在 jQuery 中使用 $.parseJSON(result) 解析它时。

function display_list(){

		action='select';
		
		$.ajax({
			type:"POST",
			url:"options.php",
			data:{ action : action },
			success: function(res){
				console.log(res)
				results = $.parseJSON(res);
				console.log(results);
			}
		});
	}

我收到此错误:

Uncaught SyntaxError: Unexpected token { in JSON at position 66 在 Function.parse [as parseJSON] () 在 Object.success (actions.js:16) 在我 (jquery-3.1.1.min.js:2) 在 Object.fireWith [as resolveWith] (jquery-3.1.1.min.js:2) 在 A (jquery-3.1.1.min.js:4) 在 XMLHttpRequest。 (jquery-3.1.1.min.js:4)

我试图传递的数据有什么问题吗?欢迎任何建议谢谢。

【问题讨论】:

  • 返回的 json 无效,尝试在本站 jsonlint.com 发布该 json 并查看您生成的 json 无效

标签: javascript php jquery json


【解决方案1】:

更改以下行:

echo json_encode()($data);

echo json_encode($data);

并从循环中删除此行并在循环结束后放置。并进行以下更改:

success: function(res){
  var data = JSON.parse(res);
  alert(data[0].name); 
}

【讨论】:

  • 我不太明白你能提供sn-p,这样我就可以根据变化来了吗?
【解决方案2】:

试试这个

function display($dbhandler){

$sql = "SELECT * FROM users";
    foreach($dbhandler->query($sql) as $row){
        $data[] = array('id'=>$row['id'], 
                         'email'=> $row['email'], 
                         'name'=> $row['name']
                         );



    }
    echo json_encode($data);        
}

我刚刚在您的$data 之后添加了[] 大括号 相当于array_pushphp arr_push()

【讨论】:

  • 仍然是同样的错误,我认为当我使用 print_r 时数据已经是一个数组,它表明它是
  • 使用上述更改后的输出 json 是什么?因为您在上面的内容首先会产生无效的 json,请参阅我对您的问题的评论
  • 你是对的,从服务器端传递数据的方式有问题,我发现出了什么问题,现在可以正常工作了
【解决方案3】:
function display($dbhandler){
$sql = "SELECT * FROM users";
$data = array();
    foreach($dbhandler->query($sql) as $row){
        $data[] = array('id'=>$row['id'], 
                         'email'=> $row['email'], 
                         'name'=> $row['name']
                         );
    }
echo json_encode($data);       
        }

关于 jQuery 函数:

function display_list(){

        action='select';

        $.ajax({
            type:"POST",
            url:"options.php",
            dataType: 'json',
            data:{ action : action },
            success: function(json){
                console.log(json)

            }
        });
    }

【讨论】:

  • 错误消失但没有显示任何输出
  • 您是否尝试过检查 Ajax 调用的响应并检查控制台栏。请分享结果。
  • 是的,当我尝试它时,它完全是空白的,另一个是我之前说的错误,尽管我在尝试推送数组时确实注意到了一些不同的东西,但第一个条目被重复了,我觉得很奇怪
  • 使用 print_r 获取 $row 记录,如果有,请尝试将 print_r 放在 json_encode 之前并检查数据。
【解决方案4】:

原来问题出在脚本的服务器端,所以我根据你的建议修改了我的代码,这就是我得到的对我有用的东西。

function display($dbhandler){

    $sql = "SELECT * FROM users";
    $result = array();
    foreach($dbhandler->query($sql) as $row){
        $data = array('id'=>$row['id'], 
                         'email'=> $row['email'], 
                         'name'=> $row['name']
                         );

        array_push($result,$data);      

    }

    echo json_encode($result);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2017-06-20
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多