php - 错误 : parsererror using Jquery, AJAx 和 JSON

标签 php jquery mysql ajax

你能帮我解决这个问题吗:

我正在 php 中的搜索页面上工作,并尝试通过 Jquery-AJAX-JSON 从 mysql 表中检索一条特定记录,不方便的是我没有从 process.php(文件查询数据库)显示在buscador.php中,而不是我在firebug中遇到错误,如图所示

error

你能告诉我我的错误是什么吗,这是我的表单buscador.php

<html lang="es-ES">
<head>
<meta name="tipo_contenido"  content="text/html;" http-equiv="content-type" charset="utf-8">
<link type="text/css" rel="stylesheet" href="content/estilos.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="javascript/jquery2.js" type="text/javascript"></script>

<title>BUSCADOR</title>
</head>
<form method="post" id="form_id" action="process2.php">
<fieldset>
<legend> Buscador Asincrono</legend>
 <p>ID a buscar: <input type="text" name="ID_name" id="ID_id"/><div id="estado_id"></div></p>
 <p><input type="submit" id="submit_id" value="Buscar"/></p>
 <img src="imagenes/cargando.gif" id="LoadingImage"  style="display:none" align="center"/>
 <div id="ajax_id"><b>Person info will be listed here...</b></div>
 <div id="msg">
<table id="infoemp" border="1" style="display:none" align="center">
<thead>
<th>ID</th>
<th>Nombre</th>
<th>Cargo</th>
</thead>
<tbody></tbody>
</table>
</div>
</fieldset>
</form>
</html>

这是我的 jquery2.js 文件

$(document).ready(function() {
  $("#form_id").submit(function(e){
    e.preventDefault(); 
    preparar();
     if(validaForm()){  
       requestInfo();
    } 
  });
});

function preparar(){
    $("#submit_id").hide();
    $("#ajax_id").html("");
    $("#LoadingImage").show();
    $("#ajax_id").html("<div class='cargando'> realizando busqueda</div>");
}

function validaForm(){
        var id_val = $("input#ID_id").val().trim(); 
        if((id_val=="") || id_val.replace(/s+/,'') == ''){
            alert("Favor ingrese el ID");
            $("input#ID_id").addClass("posicionamiento");
            $("#ajax_id").html("<div class='error'>Debe especificar el nombre</div>");
            return false;
        }else{  
        $("input#ID_id").removeClass("posicionamiento");
        $("#div_id").empty();
        }
        return true;
}   

function requestInfo(){

    var url = $("#form_id").attr('action'); 
    var data = $("#form_id").serialize();   
    var type = $("#form_id").attr('method');

    $.ajax({
    url:url,          
    data:data,       
    type:type,      
    cache: false,  
    contentType: "application/x-www-form-urlencoded", 
    dataType: 'json', 
    encode: true,
 })   

.done(function(data) { 
if(data.success == "true"){
$("#ajax_id").html(""); 
//$("#ajax_id").html("<div class='cargando'>" +data.users.status+ "</div>");
$("#ajax_id").html("<div class='cargando'>" +data.info.total+ "</div>");
//$("#ajax_id").html(data.users.status).addClass("cargando");   
$("#submit_id").show();
$("#LoadingImage").fadeOut();   
$("#infoemp").show();

var output = "<h2>" +data.total+ " empleado encontrado</h2>";

  output += '<ul>';
  output += '<li>' + data.Nombre + ': ' + data.cargo + "</li>";
  output += '</ul>';
  $("#ajax_id").html(output);

} else {  $("#ajax_id").html(data.success).addClass("cargando"); }
})

.fail(function( jqXHR, textStatus, errorThrown ) {
    $("#LoadingImage").fadeOut();
    $("#ajax_id").html(textStatus).addClass("cargando");
  if ( console && console.log ) {
       console.log( "La solicitud a fallado: " +  textStatus);
     }
    });

    }

这是我的 process2.php 文件

<?php

$bd = "ejemplo";
$server ="localhost";
$user = "root";
$password = "";

$errors = array();  // array para almacenar los errores
$data   = array();  // array para devolver info

if (isset($_POST['Submit']) && isset($_POST['ID_name'])) {
    $valor = filter_var($_POST['ID_name'], FILTER_SANITIZE_STRING);

    if ($valor == null)
        $errors['ID_name'] = 'Debe especificar el ID de busqueda.';
        $data['success'] = false;
        $data['errors']  = $errors;

    } else {
         obtenerEmpleados($valor);
}

function obtenerEmpleados( $valor ) {

    $mysqli = @mysqli_connect($server, $user, $password, $bd);
    if( ! $mysqli ) die( "Error de conexion ".mysqli_connect_error() );

    if(!$prepared_st = $mysqli->prepare("SELECT * FROM empleado_php WHERE ID = ?")){
    die("Error creando la consulta"); 
    }   

    if(!$prepared_st->bind_param("s",$valor)){ 
    die("Error vinculando parametro");
    }

    if(!$prepared_st->execute()){
    die("Fallo en la ejecución");
    }

    $result = $prepared_st->get_result(); 
    if($result->num_rows>0){     
    $data['success'] = true;
    $data['total'] = sprintf("Se han encontrado %d usuarios", $result->num_rows);

    $fila = $result->fetch_assoc();
    $data['Nombre'] = $fila['Nombre'];
    $data['cargo'] =  $fila['cargo'] 
    }

    $prepared_st->close();
    $mysqli->close(); 

    header('Content-type: application/json; charset=utf-8');
    echo json_encode($data);
}
?>

最佳答案

parsererror 消息来自 JSON 解析器,它在尝试解析的字符串中发现了错误。可能该字符串根本不是 JSON。

您还没有发布浏览器实际接收的字符串,但我怀疑正在发生这种情况:

您已在 PHP 代码的主体中定义了数据库连接变量,但尝试在此处的函数中使用它们:

function obtenerEmpleados( $valor ) {
    $mysqli = @mysqli_connect($server, $user, $password, $bd);
    if( ! $mysqli ) die( "Error de conexion ".mysqli_connect_error() );

变量超出范围,因此您的连接失败,并且您的脚本返回字符串Error de conexion...。这不是 JSON,但您的 Javascript 代码已被告知将其视为 JSON,因此您会在浏览器中看到解析错误。

您需要将连接变量作为参数传递到函数中,或者将它们声明为全局变量。

关于php - 错误 : parsererror using Jquery, AJAx 和 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30337399/

相关文章:

mysql - 如何在mysql中获取两个日期之间的月份列表

php - 属性名称必须仅在 C :\xampp\htdocs\sample\vendor\yiisoft\yii2\helpers\BaseHtml. php 中包含单词字符

php - 从 php 脚本显示虚拟主机?

php - 如何从 Magento 的主页提供忘记密码的链接?

javascript - jQuery.slideUp 的问题

mysql - 查找唯一的元组和列排列

php - Safari 嵌入 SVG 文档类型

javascript - 如何使用 jquery 根据请求的 URL 在 slider 中显示特定幻灯片

javascript - 单击 "Yes"单选按钮时显示文本区域,默认情况下或单击 "No"单选按钮时保持隐藏状态

php - 如何从 Laravel 中的两个表中选择行并将它们作为单个列表返回