【问题标题】:unknown error when trying to read json_encode data from PDO FetchAll Query尝试从 PDO FetchAll Query 读取 json_encode 数据时出现未知错误
【发布时间】:2015-12-05 16:27:24
【问题描述】:

我正在尝试以 JSON 格式管理来自 php 函数的数据,但是当我尝试访问它时,我的 Ajax 总是进入错误方法。

我的 PHP 函数:

function retornarPreguntas()
{
    try {
        global $conexion;
        $query = $conexion->query('SELECT idPreguntas, Pregunta, Categoria, Visible, formato FROM preguntas');
        $query->execute();
        $preguntas = $query->fetchAll(PDO::FETCH_ASSOC);
        header('Content-type:application/json;charset=utf-8');  
        $json = json_encode($preguntas);
        echo $json;
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }   
}

我的 JQuery 函数

            function crearPreguntas() {
              $.ajax({
                url: "includes/RespuestasAjax.php",
                type: "POST",
                data: {
                  funcion: "retornarPreguntas"
                },
                dataType: "json",
                success: function(data) {
                  var html = "<tr><td colspan='5' align='center'>Evaluación</td></tr>";
                  html += '<tr><td colspan="5" align="center">Factores Generales de desempeño y rendimiento</td></tr>';
                  //var factores = retornarFactores();
                  alert("uno");
                  for (var i = 0; i < data.length; i++) {
                    html += '<tr>';
                    html += '<td>' + data[i]['pregunta'] + '</td>';
                    html += '<td><select id="pregunta' + i + '">';
                    for (k = 1; k <= 5; k++) {
                      html += '<option value="' + k + '">' + k + '</option>';
                    }
                    html += '</tr>';
                  }
                  $('#preguntas').empty();
                  $('#preguntas').append(html);
                },
                error: function(codigo) {
                  console.log(codigo);
                }
              });
            }

如果我将我的 PHP 函数更改为 print_r,我的警报会显示数据,但我无法通过键索引访问,如果我尝试使用 json,则会出现错误:

[object Object]{readyState: 4, responseText: "", status: 200, statusText: "OK"}

知道我做错了什么吗?

【问题讨论】:

  • 当您的响应无法解析为JSON 时,带有dataType: json 的Ajax 请求会引发错误,因此请检查您是否能够正确json_encode 数据并检查您的查询。
  • 检查控制台的网络选项卡,如果您在 php 脚本中启用了错误报告,并且正在生成通知或警告,则会在 json 之前回显并使其无效导致此错误.我打赌你有类似Notice: Undefined variable: ....
  • jQuery 的error 回调包含的信息比您显示的要多。将error 回调更改为error: function(jqXHR, status, error){ console.log(status, error); }
  • 尝试将echo json_last_error(); 放在json_encode 之后。这传达了什么信息?
  • 好的,这意味着“5 = JSON_ERROR_UTF8 格式错误的 UTF-8 字符,可能编码不正确” 问题可能是西班牙语问题中使用的重音符号。 See this question

标签: php jquery json pdo


【解决方案1】:

我刚刚将这个添加到我的 php 代码中:

$preguntas = $query->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: text/html;charset=utf-8');
$json = json_encode($preguntas);

代替:

$preguntas = $query->fetchAll(PDO::FETCH_ASSOC);
**header('Content-type:application/json;charset=utf-8');**  
$json = json_encode($preguntas);

【讨论】:

  • 还有...?那解决了吗?这是对问题的答案吗?
  • 是的,我也在我的连接字符串中添加了这个:;charset=utf8mb4'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2014-01-28
  • 2021-08-20
相关资源
最近更新 更多