如果我有数据库请求,JSON解析不起作用

时间:2017-11-18 12:55:28

标签: javascript php html mysql json

如果我向数据库请求,我有json解析错误。我的PHP代码是:

if($result->num_rows){
  header('Content-Type: application/json');
  echo json_encode(array("msg" => "close"));
  $query = "DELETE FROM users WHERE num = '$num' AND password = '$pw'";
  $result = $connection->query($query);
}else {
        $myArr = array("msg" => "Неверный пароль!");
        echo json_encode($myArr);
        exit();
    }

和Ajax请求代码是:

function ajaxLoad(){
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var myObj = JSON.parse(this.responseText);
    }
  };
  xmlhttp.open("GET", url, true);
  xmlhttp.send();
}

我尝试将db请求完全注释到这个区域

$query = "DELETE FROM users WHERE num = '$num' AND password = '$pw'"; $result = $connection->query($query);

,然后我的代码运行良好,但我想提出请求。数据库请求也正常工作,删除行。我想说如果我使用删除请求responseText不起作用,但是当我评论删除请求时它会起作用。

1 个答案:

答案 0 :(得分:0)

您的数据库查询可能失败,有两个部分需要解决此问题:

  1. 您需要修复错误,第一步是查看错误实际是什么,您可以通过查看日志或AJAX请求返回的实际输出来执行此操作。
  2. 您可以在浏览器中查看它,只需转到发出AJAX请求的URL,或使用Dev Tools查看响应(如下所述:Request Monitoring in Chrome)。

    此外,您应该在try / catch块中包装依赖于外部事物(如数据库,API或任何用户数据)的任何内容,以便您可以处理任何意外错误,如下所示:

    try {
        $result = $connection->query($query);
    }
    catch(Exception $e) {
        Log::Error($e->getMessage();
    }
    
    1. 您的数据库错误不应输出到屏幕(或在此情况下作为响应的一部分)。
    2. 关闭显示错误是使用ini_set('display_errors', 1);完成的,或者通过实际更改php.ini,可以在此处找到更多详细信息:

      Turn off warnings and errors on php/mysql