开发者

is this an Array, Object or only a String that Looks like Json and outputted from PHP?

Well I have a problem reading the JSON data in jQuery, which is outputted by PHP, I´m alreaddy using json_encode();

<?php
require_once 'Post_db.php'; // a Class for doing MySQL work

/* the Post class */    
class Post {

/* An array that stores the post item data: */

private $pdata;

/* The constructor */
public function __construct($postData){
if(is_array($postData))
$this->pdata= $postData;
}



public function __toString(){
// The string that is beeing returned
// is outputed by the echo statement

$toBeJsoned=$this->pdata;
$toBeSent=json_encode($toBeJsoned);
return  $toBeSent;  
}

//read the Posts
public static function readPosts(){
$query开发者_高级运维 = new Post_db("SELECT * FROM pmessage
                 ORDER BY p_id DESC
                 ");
$posts = array();
while($row = $query->fetchRow()){
$posts [] = new Post($row);
}
foreach($posts as $item){

echo $item;
}
}

Now the Jquery :

This code is reading , but this is only a $.get method. And it returnes myPosts as 1 array with a about 5000 elmenets but there are only about 50 Posts, so it is getting each charachter from this string as an array element.

function readMyPosts(){
        $.get("phpFileThatCalltheFunctionsToRead.php",
                      {"action": "autoRead"},
                      function(myPosts){        
            //a ul element
            $("#plist").html("<li>"+myPosts+"</li>");       

               });
                 }
    readMyFacts();

When I try with $.ajax or $.getJSON, I never reach the success function, actully nothing happenes

  function ReadNewestFacts(){
        $.ajax({
        url:"phpFileThatCalltheFunctionsToRead.php", 
        data:"action=autoRead_main",
        dataType:"json",
        success: function(json){
            //do something with the data 
            alert(json);


            }});
      }
   //run this function
        ReadNewestFacts();

The phpFileThatCalltheFunctionsToRead.php file looks like this:

<?php

session_start();
require_once "post.class.php";


 if(isset($thisUid)){
$thisUid= $_GET['thisUid'];
}

if(isset($action)){
$action = $_GET['action'];
}

try{
    switch($_GET['action'])
    {
        case 'autoRead_main':
            Post::readPosts();
            break;      

        case 'autoRead':
            Post::readMyPosts($_GET['thisUid']);
            break;
            case ' more cases
               ..
                  .
                .
              .'




    }

}
catch(Exception $e){
    // echo $e->getMessage();
    die("0");
}

All I was able to recive is

{"p_id":"1","p_text":"blabla","p_adder":"1"}{"p_id":"2","p_text":"blabla2","p_adder":"1"}{"p_id":"3","p_text":"more blabla","p_adder":"2"}{"p_id":"4","p_text":"more and more blabla","p_adder":"1"}{}....

The JSON formatting seems to be working correctly !?,, but I think the Jquery not beeing able to read the JSON String from PHP ? I´m really not sure here :( ..

I´m not beeing able to access the JSON data on the jQuery side.. I tried many methods found here on StacKover.. but I think im missing something ..


You are missing commas in between the "{ }"-blocks

[{"p_id":"1","p_text":"blabla","p_adder":"1"},{"p_id":"2","p_text":"blabla2","p_adder":"1"},{"p_id":"3","p_text":"more blabla","p_adder":"2"},{"p_id":"4","p_text":"more and more blabla","p_adder":"1"},{}]


Your problem is that you're outputting multiple JSON objects together.

This is because each Post object in your PHP code outputs a single block of JSON. You're creating an array of Post objects, and so you're getting multiple blocks of JSON.

Each block of JSON you're generating is valid, but simply concatenating them together is not valid JSON.

If you want to have your Post objects output an array of their JSON objects, then you need to write the JSON code for that as well.

You can't json_encode the whole thing, because it's already encoded, so the easist way to fix it in your code is just to print [ and ] at either end of your output, and a comma between each Post object output.

You could do it like this:

echo '['.implode(',',$posts).']';

instead of your foreach() loop.


In reaction to @JochenJung, you need to have it like this:

json_encode( array( array1, array2, ...) ); to have comma's inserted.


use json_encode() and json_decode()


Try do do

error: function(json){
            console.log(json);//need to have firebug


            }});

1.Remove all empty spaces from all files.(Need to be clean)
2.Use json_encode('HERE CAN BE ARRAY);

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜