getJSON with jquery

时间:2012-01-19 22:18:37

标签: php jquery json

当我尝试使用getJSON显示数据时,$('#child-left-container-2')应该显示来自php文件的数据。我哪里出错?...以下是我的代码的简短示例。

php文件

while($row = mysql_fetch_assoc($query)) {

//code

    $array[] = "<div class='array-container-2' $style id='$id' data-sid='$sid' data-user='$user'>$details1</div>";


            }

            echo json_encode($array);

jquery的

$(function() {
    $('.next_button').click(function() {

var id =  $('#container').find('.graphic-blank:visible').siblings().attr('id');

        $.getJSON('fetchstack.php?id='+id,function(data) {

            $('#child-left-container-2').html(''); //clear div

            $.each(data,function(i,result) {
                $('#child-left-container-2').append(result);
            });
        });

          });
});

7 个答案:

答案 0 :(得分:1)

我不知道这是否可以解决您遇到的问题,但这将是我如何解决这个特殊问题。 试试这段代码,如果有效,停止通过json发送html将是一个奖励。

$key = 0;
while($row = mysql_fetch_assoc($query)) {
    //code
    $array[$key]['id']      = $id;
    $array[$key]['sid']     = $sid;
    $array[$key]['user']    = $user;
    $array[$key]['content'] = $details1;
    $array[$key]['style']   = $style;
    $key++;
}

echo json_encode($array);

JS:

$(function() {
    $('.next_button').click(function() {

        var id =  $('#container').find('.graphic-blank:visible').siblings().attr('id');
        $.getJSON('fetchstack.php?id='+id,function(data) {
            $('#child-left-container-2').html(''); //clear div

            for (var i in data){
                var id      = data[i].id;
                var sid     = data[i].sid;
                var user    = data[i].user;
                var content = data[i].content;
                var style   = data[i].style;
                $('#child-left-container-2').append($('<div />').addClass('array-container-2')attr('id', id)
               .attr('data-sid', sid).attr('data-user', user).html(content);
            }           
       });
   });
});

我承认,不知道$ style是什么或者它是如何呈现的,我无法将它添加到链中。如果你发布$ style的内容我可以更新anwser。 我希望这会有所帮助。

答案 1 :(得分:0)

在jQuery的第二行

var id =  $('#container').find('.graphic-blank:visible').siblings().attr('id');

您正在尝试访问jQuery对象数组的id属性(siblings())。您需要指定一个jQuery对象来获取$getJSON函数的id

更新如果只有一个兄弟,请执行

指定
var id =  $('#container').find('.graphic-blank:visible').siblings().eq(0).attr('id');

答案 2 :(得分:0)

我不是故意侮辱你,但你所做的是不好的做法。如果从客户端创建HTML,则可以有更短的请求。此外,如果您使用firebug,您可以看到输出JSON的图表。它真的是一个漂亮的功能。您还可以检查它是否保存在Firebug中的DOM部分下。祝你好运。

答案 3 :(得分:0)

在设置对html元素的响应之前,使用console.log调试它,

我没有看到你创建了一个div response = $('#child-left-container-2') 检查你是否有

<div id="child-left-container-2" />

并检查你的反应,maby json in array ... 尝试console.log(data)并使用F12打开debbuger

答案 4 :(得分:0)

为什么不简单地在PHP文件中回显HTML,然后用它填充容器?

while($row = mysql_fetch_assoc($query)) {
    echo "<div class='array-container-2' $style id='$id' data-sid='$sid' data-user='$user'>$details1</div>";
}

$.getJSON('fetchstack.php?id='+id,function(data) {
    $('#child-left-container-2').html(data);
});

答案 5 :(得分:0)

这是我的解决方案并且完美无瑕:

PHP:

<?php

ini_set('magic_quotes_gpc', false);
header('Content-type: text/plain');

      //DB connection credentials
$dbhost = 'hostname';
$dbuser = 'database_username';
$dbpass = 'database_password';
$dbname = 'database_name';

// allow cross-browser acces
header('Access-Control-Allow-Origin: *');

// query SQL
$sql = "do your DB query SELECT what ever here";

  //do our thingies withouth hacks (SQL Injection, etc)
try {
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->query("set names utf8");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->query($sql);  
$json_export = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbh = null;

    // return JSON format DATA
echo '{"items":'. json_encode($json_export) .'}'; 
} catch(PDOException $e) {

    // return error
echo '{"error":{"text":'. $e->getMessage() .'}}'; 
}

?>

HTML LISTVIEW:

<div data-role="page" id="myPage"><div data-role="content" id="myContent">
       //my HTML list tag
  <ul data-role="listview" id="myList"></ul>
</div></div>

JAVASCRIPT

  //trigger script on show page
$('#myPage').live('pageshow',function (event) {
       //get our JSON data
    $.getJSON('path_to_your_php_json_generator_file_declared_upper',function(data){
          //append our JSON data to a variable
       var json_entries = data.items;
                //for each JSON data, append it to our list as one element
       $.each(json_entries,function(index,entry){
           $('#myList').append('<li><a href="#">' + entry.title + '</a></li>');
             //assuming we have a field named "title" in JSON data
       });
             //refresh the list for layout (style) loading
       $('#myList').listview('refresh');
    });
});

这就是你如何使用php文件生成的JSON数据在jQuery Mobile上填充列表。 您可以将此类脚本调整为jQuery代码中的每个JSON解释器,即使使用参数(id,category等)也是如此!

希望它有所帮助!

答案 6 :(得分:0)

尝试将此juste放在echo json_encode($array);之前。 最终进行退出调用以避免额外输出。

header('Content-type:application/json;charset=utf-8');
echo json_encode($array);
exit();