Не conigo чтения массива, закодированные с помощью PHP в json


я Не получаю, в jQuery Ajax прочитать эту array, закодированный PHP:

[{"voo_Cod":"1","voo_CidadeOrigem":"1","voo_CidadeDestino":"2","voo_Data":"2015-07-13 07:00:00","voo_Preco":"200"}]

Мой код в jquery)

       <script>
        $(function() {
            $("#form").on("submit", function(event) {
                event.preventDefault();

                $.ajax({
                    url: "dadosJSON.php",
                    // dataType: "json",
                    type: "post",
                    data: $(this).serialize(),//manda os arquivos em linha
                    success: function(d) {
                        alert(d);


        //testa se exista dados
         if(d[0].erro){
         $("h2").html(d[0].erro);
        } else{
        var html = "";     
        // var html =alert(d);
        // executo este laço para ecessar os itens do objeto javaScript
        for($i=0; $i < d.length; $i++){
            html += " <strong>Voo Data e Horario</strong> "+ d[$i].voo_Data;

            html += " <strong>Preco</strong> "+ d[$i].voo_Preco;
        }//fim do laço  

      }//fim do else


        $("body").html(html); 

                });
            });
        });


    </script>

Мой код в PHP:

 <?php
// header('Content-Type: application/json; charset=utf8');
require_once("./authSession.php");
require_once("./conf/confBD.php");
include_once("../html/cabecalho_main_Pessoal.html");



$nomeUser = ($_SESSION['nomeUsuario']);
 //teste
//print_r($_POST);// you will get an array of all the values


try{
    $conexao = conn_mysql();
}catch(PDOException $excep){
    echo "Erro!: " . $excep->getMessage() . "\n";
    die();
}


if(!empty($_POST['cidadeOrigem'])){
    $cidOrigem   =  utf8_encode(htmlspecialchars($_POST['cidadeOrigem']));
    $CidDestino  =  utf8_encode(htmlspecialchars($_POST['cidadeDestino']));
    //$passageiros =  utf8_encode(htmlspecialchars($_POST['Passageiros']));
    echo "Contém arquivos";
}else{ echo "Não contém arquivos";}

// Captura os voos disponiveis no banco de dados instrução SQL básica (sem   restrição de nome), 
    $SQLSelect = 'SELECT * FROM voos WHERE voo_CidadeOrigem=? AND   voo_CidadeDestino= ?';

    //prepara a execução da sentença
    $operacao   =  $conexao -> prepare($SQLSelect);

    $pesquisar  =  $operacao -> execute(array($cidOrigem, $CidDestino));

    //$resultados =  $operacao -> fetchAll();//resultado antigo

    $resultados = $operacao->fetchAll(PDO::FETCH_ASSOC);//resultado com array associativo

    // fecha a conexão (os resultados já estão capturados)
    $conexao = null;    



$dados_result = json_encode($resultados);
echo $dados_result;

?>

Моя сброшен создает loop, переменных, неопределенные.

Рейса, Дата и Horario undefined Цены undefined

Содержит файлы

[{"voo_Cod":"1","voo_CidadeOrigem":"1","voo_CidadeDestino":"2","voo_Data":"2015-07-13 07:00:00","voo_Preco":"200"}]

В консоли журнала, показывает код ниже

 <!DOCTYPE html>
<html lang="pt-br">
<head>
   <meta charset="UTF-8">
   <title>SISTEMA DAW TURISMO</title>   

   <script    src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

   <link rel="stylesheet" type="text/css" href="../CSS/estiloCabecalho.css">

   <link rel="stylesheet" type="text/css" href="../CSS/estilo_login_teste.css">

   <link rel="stylesheet" type="text/css" href="../CSS/estilo_cadastro.css">

    <!--! funciona pra agenda lettering-->
   <link href="../css/starter-template.css" rel="stylesheet">

   <!-- Importando JavaScript -->
   <!-- <script type="text/javascript" src="../JS/ajax_Jquery.js"></script>-->




        <script>


       $(function() {
        $("#form").on("submit", function(event) {
            event.preventDefault();

            $.ajax({
                url: "dadosJSON.php",
                type: "post",
                data: $(this).serialize(),
                success: function(d) {
                    alert(d);

                    if (console) {
                        console.log(d);
                    }

                    if(d[0] && d[0].erro){
                        $("h2").html(d[0].erro);
                    } else {
                        var html = "", j = d.length;
                        for(var i=0; i < j; i++){
                            html += " <strong>Voo Data e Horario</strong> "+   d[i].voo_Data;

                            html += " <strong>Preco</strong> "+    d[i].voo_Preco;
                        }//else fecha
                   }
                    $("body").html(html); 

                            }
                    });
                });
            });




        </script>



</head>



<body>

    <h1>SISTEMA DAW TURISMO</h1>
<nav id="primary_nav_wrap">
<ul>
  <li class="current-menu-item"><a href="./mainPage_Pessoal.php">Home</a>   </li>
  <li><a href="./index.php">Reservas</a></li>
  <li><a href="./alterar_Cadastro.php">Alterar Cadastro</a></li>
  <li><a href="./mainPage_Pessoal.php">Passagens</a></li>
  <li><a href="./hoteis.php">Hotéis</a></li>
   <li><a href="./listarCompras.php">Listar Reservas</a></li>
  <li><a href="./logout.php">Sair</a></li>
  <!-- <li><a href="#">Reservas</a></li>
  <li><a href="#">Contact Us</a></li> -->
</ul>
</nav>

</body>
</html>
 1
Author: Augusto, 2015-07-06

2 answers

Если я понял хорошо, то проблема может быть в PHP, это добавить заголовок в PHP так:

DadosJSON.php:

<?php
header('Content-Type: application/json; charset=utf8');

//Resto do seu código PHP abaixo

Замените charset необходимости

, И я рекомендую использовать хороший отступ и всегда использовать var при объявлении новости переменные, также всегда рекомендую setar o .length в переменную, а не внутри цикла, и вместо того, чтобы alert используйте console.log для отладки кода:

    $(function() {
        $("#form").on("submit", function(event) {
            event.preventDefault();

            $.ajax({
                url: "dadosJSON.php",
                type: "post",
                data: $(this).serialize(),
                success: function(d) {
                    alert(d);

                    if (console) {
                        console.log(d);
                    }

                    if(d[0] && d[0].erro){
                        $("h2").html(d[0].erro);
                    } else {
                        var html = "", j = d.length;
                        for(var i=0; i < j; i++){
                            html += " <strong>Voo Data e Horario</strong> " + d[i].voo_Data;

                            html += " <strong>Preco</strong> " + d[i].voo_Preco;
                        }
                    }
                    $("body").html(html); 
                }
            });
        });
    });

Обратите Внимание, что теперь alert(d) покажет [Object object]

, Любя, просмотра данных, передаваемых на консоли используйте сочетание клавиш Command + Option + J (Mac) и Ctrl + Shift + J (Windows/Linux).


Обновлении

Согласно output console.log файл dataJSON.php возвращает тело HTML.

Нельзя смешивать HTML с JSON, таким образом, убедитесь, что вы добавили это:

include_once("../html/cabecalho_main_Pessoal.html");

, что, вероятно, является HTML, но ваш ответ должен быть JSON, смешивать HTML с JSON приведет к тому, что интерпретатор не в состоянии "анализировать" json, затем удалите то, что не будет использовать.

См. также, что сообщения об ошибках должны быть json, попробуйте так:

<?php
header('Content-Type: application/json; charset=utf8');
require_once("./authSession.php");
require_once("./conf/confBD.php");

$nomeUser = ($_SESSION['nomeUsuario']);
 //teste
//print_r($_POST);// you will get an array of all the values


try{
    $conexao = conn_mysql();
}catch(PDOException $excep){
    echo json_encode(array("Erro!: " . $excep->getMessage() . "\n"));
    die();
}

if(!empty($_POST['cidadeOrigem'])){
    $cidOrigem   =  utf8_encode(htmlspecialchars($_POST['cidadeOrigem']));
    $CidDestino  =  utf8_encode(htmlspecialchars($_POST['cidadeDestino']));
    //$passageiros =  utf8_encode(htmlspecialchars($_POST['Passageiros']));
} else {
   echo json_encode(array("Não contém arquivos"));
   die();
}

// Captura os voos disponíveis no banco de dados instrução SQL básica (sem   restrição de nome), 
    $SQLSelect = 'SELECT * FROM voos WHERE voo_CidadeOrigem=? AND   voo_CidadeDestino= ?';

    //prepara a execução da sentença
    $operacao   =  $conexao -> prepare($SQLSelect);

    $pesquisar  =  $operacao -> execute(array($cidOrigem, $CidDestino));

    //$resultados =  $operacao -> fetchAll();//resultado antigo

    $resultados = $operacao->fetchAll(PDO::FETCH_ASSOC);//resultado com array associativo

    // fecha a conexão (os resultados já estão capturados)
    $conexao = null;    

$dados_result = json_encode($resultados);
echo $dados_result;
die();
?>
 1
Author: Guilherme Nascimento, 2015-07-06 22:06:19

, Ответ от @Guilherme правдоподобно, по-видимому, это проблема. Как он может быть уже решена ваша проблема, я reescrevi свой код, не использовать $.ajax, потому что он не является лучшим решением, я не совсем понял, что ваш код делает в целом, но я сделал что-то через подобное и в - GET, но может изменить пра - POST, если хотите, если в другой день вы хотите, чтобы адаптироваться к их конструкции или если кто-то хочет использовать что-то более чистое в jQuery

HTML:

<script type="text/javascript" language="JavaScript" src="https://code.jquery.com/jquery-latest.js"> </script>
<form id="exemplo">
<input type="submit" value="Simbora" />
</form>
<body>
<h2></h2>
</body>

СЦЕНАРИЙ:

<script>
    $(function() {

        var n = 0;

        var html = "";

            $("form").on("submit", function(event) {

                event.preventDefault();

                    $.getJSON('dadosJSON.php', function(d) {

                        if(!d.voo_Data){

                            $("h2").html(d.erro);

                        } else {

                            //Buscaria todos os dados da JSON.
                            /*$.each(d, function (k,v) {
                                html += " <strong>"+k+":</strong> "+ v +"<br/>";
                            });*/

                            html += " <strong>Voo Data e Horario</strong> "+ d.voo_Data;

                            html += " <strong>Preco</strong> "+ d.voo_Preco;

                            $("body").html(html); 
                        }
                    });
            });
       });


    </script>

PHP:

<?php 
$data = (object)array("voo_Cod"=>"1",
                      "voo_CidadeOrigem"=>"1",
                      "voo_CidadeDestino"=>"2",
                      "voo_Data"=>"2015-07-13 07:00:00",
                      "voo_Preco"=>"200");

echo json_encode($data);

//Erro 
/*
$erro = (object)array("erro"=>"Houve algum problema");

echo json_encode($erro);*/
 0
Author: Cassiano José, 2015-07-10 12:28:40