JSON Veritabanı kaydetmek ve JQuery ile yük

3 Cevap php

Ben büyük bir JSON nesnesi oluşturmak ve benim veritabanına kaydetmek. Ben "dizesini" yüklemek ve PHP echo Ama, ben JQuery JSON nesne erişemez. Gayet iyi çalışıyor, ama ben nesne kaydetmek gerekir; "echo json_encode ($ dizi)" Ben sadece Array oluşturduğunuzda (MySQL Veritabanı benim JSON nesne kaydetmek istediğiniz ve daha sonra echo eğer bir şey düşünmek zorunda önbelleğe alma için).

{"247":{"0":"This is a question","1":"","2":"247","3":"0","answers":[["Answer1","960","1"],["Answer 2","962","0"],["Answer 3","961","0"],["Answer 4","963","0"]]},{"248":{"0":"This is a question","1":"","2":"247","3":"0","answers":[["Answer1","960","1"],["Answer 2","962","0"],["Answer 3","961","0"],["Answer 4","963","0"]]}}

just an excerpt

Ben sadece bu JSON-Nesne yankı varsa, her şey çalışıyor, ancak ben veritabanından aynı dize yüklenemedi ve echo, eğer çalışmaz.

Güncellemek 1: Ben utf8_general_ci harmanlama ile METİN-Alan kullanıyorum söylemek unutmak

Güncelleme 2: Belki biraz fazla kod:

function start() {
    $(".start").click(function () {

    	$.post("load_script.php", { }, function(data){
        	alert(data[247][0]);
       	}, "json");

    	return false;
    });
}

Bu komut dosyasını yükler ve "Bu soru" uyarmalıdır

<?php
require_once('connect.php');

$ergebnis = mysql_query("SELECT text FROM cache_table ORDER BY RAND() LIMIT 1");
while($row = mysql_fetch_object($ergebnis)) {
   	$output = $row->text;
}

echo $output;

>

Bu JSON-nesne ile veritabanı girişi yüklemek komut dosyası vardır.

Update 3: I think I solved the problem. Some break sneaked into my JSON-Object so I do this, before the output:

$output = str_replace("\n", "", $output);
$output = str_replace("\r", "", $output);
$output = str_replace("\r\n", "", $output);

3 Cevap

Ben javascript görmeye ne bakarak öneririm. Bunun yerine sizin için json yorumlamak için jQuery soran, ham verilere bir göz atın:

function start() {
    $(".start").click(function () {

        $.post("load_script.php", { }, function(data){
                alert(data);
        }, "text");

        return false;
    });
}

Dizenin parçası tuhaf çünkü UTF-8 kodlanmış alırsa Örneğin, bu görünmesini neden olabilir.

Bunu yaptıktan sonra hala sorun nokta olamaz eğer, bu kodu deneyin:

var data1, data2;
function start() {
    $(".start").click(function () {

        $.post("load_script.php", {src: "db" }, function(data){
                data1 = data;
        }, "text");

        $.post("load_script.php", {src: "echo" }, function(data){
                data2 = data;
        }, "text");

        if (data1 == data2) {
           alert("data1 == data2");
        }
        else {
           var len = data1.length < data2.length ? data1.length : data2.length;
           for(i=0; i<len; ++i) {
              if (data1.charAt(i) != data2.charAt(i)) {
                 alert("data1 first differs from data2 at character index " + i);
                 break;
              }
           }
        }

        return false;
    });
}

Ve sonra veritabanından veri döndürmek ya PHP kodu değiştirmek veya basitçe sonrası parametrelere bağlı olarak, echo:

<?php
   if ($_POST['src'] == 'db')) {
      require_once('connect.php');

      $ergebnis = mysql_query("SELECT text FROM cache_table ORDER BY RAND() LIMIT 1");
      while($row = mysql_fetch_object($ergebnis)) {
        $output = $row->text;
      }
   }
   else {
      $output = '{"247":{"0":"This is a question","1":"","2":"247","3":"0","answers":[["Answer1","960","1"],["Answer 2","962","0"],["Answer 3","961","0"],["Answer 4","963","0"]]},{"248":{"0":"This is a question","1":"","2":"247","3":"0","answers":[["Answer1","960","1"],["Answer 2","962","0"],["Answer 3","961","0"],["Answer 4","963","0"]]}}';
   }

echo $output;
?>

Umarım ki olur!

Ben biraz farklı bir şekilde çalışmak için bu lazım. Ben bu nasıl yapıldığını göstermek için denedim.

In Plain English:

kullanmak urldecode()

In Commented Code Fragments

$json    = $this->getContent($url);  // CURL function to get JSON from service
$result  = json_decode($json, true); // $result is now an associative array

...

$insert  = "INSERT INTO mytable (url, data) ";
$insert .= "VALUES('" . $url . "', '" . urlencode(json_encode($result)) . "') ";
$insert .= "ON DUPLICATE KEY UPDATE url=url";

...

/*
** Figure out when you want to check cache, and then it goes something like this
*/

$sqlSelect = "SELECT * FROM mytable WHERE url='" . $url . "' LIMIT 0,1";

$result = mysql_query($sqlSelect) or die(mysql_error());
$num    = mysql_numrows($result);

if ($num>0) {
    $row   = mysql_fetch_assoc($result);
    $cache = json_decode(urldecode($row['data']), true);
}

Bu yardımcı olur umuyoruz

Belki varchar alanını kullanın ve dize sadece 255 karakter uymuyor?