错误:使用Jquery,AJAx和JSON的parsererror

时间:2015-05-19 22:42:25

标签: 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);
}
?>

1 个答案:

答案 0 :(得分:0)

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,因此您在浏览器中看到了解析错误。

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