PHP script JSON ve HTML dönen

3 Cevap php

Merhaba burada soruları arandı, ancak bir şey bulamadı. PHP ve jQuery yazma yeniyim, yani ayı ile beni.

Ne yapmaya çalışıyorum benim veritabanından veri üzerinde bir mysql sorgu çalıştırır ve PHP'nin json_encode kullanarak JSON biçiminde içine serileştirir benim script jQuery kullanarak bir ajax isteği gönderilir. Yanıtı daha sonra mevcut json2.js komut ile ayrıştırılır. Tüm bu iyi çalışır, ama ben de bu script sadece JSON dışında fazla veri dönmek istiyorum.

ağırlıklı olarak, ben de json_encode önce aşağıdaki satırı yankı istiyorum:

echo "<h1 style='margin-left: 25px;'>$num_rows Comments for $mysql_table</h1>";

Ancak, benim jQuery JSON.parse işlevi nedeniyle betiğin dönüş biçimi geçersiz olmak için başarısız yapma, ajax başarı sırasında tüm yanıtı değerlendirmek.

        success: function(data) {
            //retrieve comments to display on page by parsing them to a JSON object
            var obj = JSON.parse(data);
                    //loop through all items in the JSON array
                    for (var x = 0; x < obj.length; x++) {
                        //Create a container for the new element
                        var div = $("<div>").addClass("bubble").appendTo("#comments");
                        //Add author name and comment to container
                        var blockquote = $("<blockquote>").appendTo(div);
                            $("<p>").text(obj[x].comment).appendTo(blockquote);
                        var cite = $("<cite>").appendTo(div);
                            $("<strong>").text(obj[x].name).appendTo(cite);
                            $("<i>").text(obj[x].datetime).appendTo(cite);
                    }
                $("#db").attr("value", '' + initialComments + '');
    }   

i html çizgi yanı sıra sadece json nüfusundan daha fazla, bu komut dosyasını kullanmak için json_encode dönebilirsiniz nasıl bilen var mı?

teşekkür ederim, bu web sitesi benim çaylak soruları yanıtlayan harika olmuş.

Benim php: `

    for ($x = 0, $numrows = mysql_num_rows($result); $x < $numrows; $x++) {
$row = mysql_fetch_assoc($result);
    $comments[$x] = array("name" => stripslashes($row["name"]), "comment" => stripslashes($row["comment"]), "datetime" => date("m/d/Y g:i A", strtotime($comment['datetime'])));        
}

//echo "<h1 style='margin-left: 25px;'>$num_rows Comments for $mysql_table</h1>";

$response = json_encode($comments);
echo $response;`

3 Cevap

Don't echo the line, save it in a variable. Construct a simple array $response = array( 'html' => $the_line_you_wanted_to_echo, 'jsobject' => $the_object_you_were_going_to_send_back ); and send that back ( via json_encode ) instead.

Ayrıca, json2.js gerekmez, jQuery mükemmel bir JSON ayrıştırıcı vardır.

Böyle yükleyebilirsiniz $.get( 'your/url', { params : here }, success, 'JSON' );

Changed to match your newly introduced iteration.

for ($x = 0, $num_rows = mysql_num_rows($result); $x < $num_rows; $x++) {
    $row = mysql_fetch_assoc($result);
    $comments[$x] = array(
        "name" => stripslashes($row["name"]), 
        "comment" => stripslashes($row["comment"]), 
        "datetime" => date("m/d/Y g:i A", strtotime($comment['datetime']))
    );        
}

$html = "<h1 style='margin-left: 25px;'>$num_rows Comments for $mysql_table</h1>";

echo json_encode(array( 'comments' => $comments, 'html' => $html ));

, sonra javascript, sen var

function success( parsedObject ){
    parsedObject.html; // "<h1 style..."
    parsedObject.comments; // an array of objects
    parsedObject.comments[0].name 
    + " on " + parsedObject.comments[0].datetime 
    + " said \n" + parsedObject.comments[0].comment; // for example
}

Yukarıda söylediğim gibi sadece geri bir diziye almak ve bu kodlamak istediğiniz tüm verileri koydu.

<?php

echo json_encode(array(
    'html' => $html,
    'foo' => $bar,
    'bar' => $baz
));

?>

Ayrıca olarak json2.js gerek yok dedi. Sen json olarak veri türünü belirterek jQuery'nin ajax fonksiyonları herhangi JSON veri ayrıştırmak.

$.ajax({
    type: 'POST',
    url: 'path/to/php/script.php',
    dataType: 'json',
    data: 'foo=bar&baz=whatever',
    success: function($data) {
        var html = $data.html;
        var foo = $data.foo;
        var bar = $data.bar;

        // Do whatever.
    }
});

EDIT Oldukça fazla Horia ne dedi. Eğer aynı dizide her şeyi istiyorsa ben görebiliyordum sadece diğer çeşididir.

Örneğin:

PHP:

<?php

// You have your comment array sent up as you want as $comments
// Then just prepend the HTML string onto the beginning of your comments array.
// So now $comments[0] is your HTML string and everything past that is your comments.
$comments = array_unshift($comments, $your_html_string);

echo json_encode($comments);

?>

jQuery:

$.ajax({
    type: 'POST',
    url: 'path/to/php/script.php',
    dataType: 'json',
    data: 'foo=bar&baz=whatever',
    success: function($comments) {
        // Here's your html string.
        var html = $comments[0];

        // Make sure to start at 1 or you're going to get your HTML string twice.
        // You could also skip storing it above, start at 0, and add a bit to the for loop:
        // if x == 0 then print the HTML string else print comments.
        for (var x = 1; x < $comments.length; x++) {
            // Do what you want with your comments.
            // Accessed like so:
            var name = $comments[x].name;
            var comment = $comments[x].comment;
            var datetime = $comments[x].datetime;
        }
    }
});

Siz de ilginizi çekebilir jLinq, görebilmek için Javascript nesneleri sorgulamak için izin veren bir Javascript kütüphanesidir. Bir örnek sorgu olacaktır:

var results = jLinq.from(data.users)
    .startsWith("first", "a")
    .orEndsWith("y")
    .orderBy("admin", "age")
    .select();

jLinq iç içe nesneleri sorgulamak ve katılır performans destekler. Örneğin:

var results = jLinq.from(data.users) 
    .join(data.locations, //the source array 
        "location", //the alias to use (when joined) 
        "locationId", // the location id for the user 
        "id" // the id for the location 
    ) 
    .select(function(r) { 
        return { 
            fullname:r.first + " " + r.last, 
            city:r.location.city, 
            state:r.location.state 
        }; 
    });