Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

159
Visualizações
No se puede devolver la matriz de la función php a la solicitud ajax

Tengo un archivo javascript en el que estoy haciendo una solicitud ajax a foo.php para obtener una serie de resultados de mysql. Aquí está mi archivo javascript.

 //foo.js $(document).ready(function(){ $.ajax({ url:"foo.php", type:"POST", data:{ action:"test", remail:"foo" }, success:function(data){ var messages = data; console.log("Ext req"); try{ console.log(JSON.parse(data)); }catch(e){ console.log(data); } }, failure:function(){ } }) });

Para recibir mi matriz de resultados de php, hago lo siguiente:

 //foo.php <?php if(isset($_POST)){ $action = $_POST['action']; if(empty($action)){ return; } switch($action){ case "test": $query = "select * from message where seen"; $ar = []; $res = mysqli_query($con,$query); while($row = mysqli_fetch_array($res)){ $ar[] = $row; } echo json_encode($ar); break; } } ?>

Esto devuelve una matriz de objetos a mi solicitud ajax que luego puedo manejar de acuerdo con mis necesidades. Sin embargo, si trato de mover el código php dentro de la declaración de cambio a una función y devuelvo el resultado codificado de la función, solo obtengo una matriz vacía como respuesta. Así es como estoy tratando de hacerlo:

 <?php function test(){ $query = "select * from message where seen"; $ar = []; $res = mysqli_query($con,$query); while($row = mysqli_fetch_array($res)){ $ar[] = $row; } return $ar; } if(isset($_POST)){ $action = $_POST['action']; if(empty($action)){ return; } switch($action){ case "test": $result = test(); echo json_encode($result); break; } } ?>

¿Alguna idea de por qué sucede esto?

ACTUALIZAR

$con es una variable que viene de otro archivo que include

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Cuando movió su lógica de consulta a una función, $con , el objeto de conexión de MySQL no está disponible. Utilice GLOBAL $con; dentro de su función.

Lea esto para comprender el alcance variable

Método 1 usando la palabra clave GLOBAL

 function test(){ GLOBAL $con; $query = "select * from message where seen"; $ar = []; $res = mysqli_query($con,$query); while($row = mysqli_fetch_array($res)){ $ar[] = $row; } return $ar; }

Método 2 Pasar un argumento a una función

 function test($con){ $query = "select * from message where seen"; $ar = []; $res = mysqli_query($con,$query); while($row = mysqli_fetch_array($res)){ $ar[] = $row; } return $ar; } Call it like this: test($con);
about 4 years ago · Santiago Trujillo Relatório

0

Las variables globales, si no se usan con cuidado, pueden hacer que los problemas sean más difíciles de encontrar, como sugiere otra solución. Pase $con como argumento a su función:

 function test($con){ $query = "select * from message where seen"; $ar = []; $res = mysqli_query($con,$query); while($row = mysqli_fetch_array($res)){ $ar[] = $row; } return $ar; }
about 4 years ago · Santiago Trujillo Relatório

0

Hablemos de los problemas que tiene:

  1. Pasas una función de failure a $.ajax . Seguramente querías usar error en lugar de failure . Ver aquí

  2. Tiene una variable de messages inicializada, pero sin usar dentro del success . Desaste de eso.

  3. Verifica isset($_POST) , pero eso siempre será true . Quería comprobar isset($_POST["action"]) en su lugar, o quería comprobar si se trata de una solicitud POST .

  4. $con no está disponible dentro de la function . Deberá inicializarlo dentro de la function o pasárselo y usarlo como parámetro.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda