试图从带有ajax的php接收json并以HTML格式打印结果

时间:2015-11-05 17:13:58

标签: php jquery json ajax cordova

我试图使用phonegap制作应用程序。我正在尝试使用php进行选择将结果返回到ajax函数并打印结果...但我不知道我是否做得对,我需要在html代码中放置以显示结果。

AJAX代码:

$(document).ready(function() {

$.ajax({

    url : 'http://ip/again/www/index.php',

    dataType : "json",

    success : function(data){

        var html = "";


        for($i=0; $i < data.length; $i++){

            html += "<strong>Nome:</strong> "+data[$i].nome +" "+   
            data[$i].sobreNome;

            html += " <strong>Cidade:</strong> "+data[$i].cidade;

            html += "<br />";
        }


        $('body').html(html);
        }
    });
   });
</script>

PHP代码:

<?php
$hostname = 'localhost';
$username = 'root';
$password = 'pass';
$database = 'mydb';

try {
$pdo = new PDO("mysql:host=$hostname;dbname=$database", $username,   
$password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    //echo 'Conexao efetuada com sucesso!';
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

 $sql = 'SELECT * FROM incidente ORDER BY codigo' ;


try {

$recebeConexao = $pdo->prepare($sql);

$recebeConexao->execute();

$result = $recebeConexao->fetchAll();


if ( count($result) ) {
foreach($result as $row) {
    $incid=$row;
      echo (json_encode($incid));

}
} else {
$incid=0;
}


} catch (PDOException $ex) {
echo "Erro no Banco";
}

?>

1 个答案:

答案 0 :(得分:0)

您正在错误地编写for循环。您必须使用var关键字声明您的变量,如下所示:

for(var $i = 0; $i < data.length; $i++) {
    // ...
}

由于您的脚本未返回数组,因此length属性将不可用。

当您在Javascript中处理对象时,您需要使用for...in语法(making sure to validate that the property belongs to the object you're iterating over)。

但是,您提供的代码不会返回对象或数组,因为JSON格式不正确。

API返回多个无序Javascript对象的正确方法是将它们包装在一个数组中,如下所示:

if(count($result)) {
    $list = array();

    foreach($result as $row) {
        $list[] = $row;
    }

    echo json_encode($list);
}
$.ajax({
    // ...
    success: function (data) {
        // Loop over each object, since your script should ideally return an array
        for (var $i = 0; $i < data.length; $i++) {
            var object = data[$i];

            html += '<strong>Nome:</strong> ' + object.nome + ' ' + object.sobreNome;

            // etc...
        }
    }
});