我正在使用php中的搜索页面尝试通过Jquery-AJAX-JSON从mysql表中检索一条特定的记录,不方便的是我没有从process.php(文件)中获取任何数据查询数据库)以显示在buscador.php而不是我在firebug中出现错误,如图像
你能告诉我我的错误是什么,这是我的表格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);
}
?>
答案 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,因此您在浏览器中看到了解析错误。
您需要将连接变量作为参数传递给函数,或者将它们声明为全局。