JavaScript JSON kullanımı

9 Cevap php

I have been misinterpreted. I have created a JSON Object in PHP. I just need access to that object in Javascript. That is all.

Ben sadece sorunları çok JSON kullanarak çözülebileceğini öğrendim. Şimdi JSON kullanmayı öğrenmek olsa da, başka bir sorundur. ;-)

Bu PHP kodu olduğunu varsayın:

$row = array()
while ($row = mysql_fetch_object($result)
{
    $data[] = $row;
}
$javascriptFriendlyData = json_encode($data);

Now how do I access the $javascriptFriendlyData in javascript. I tried using JQuery but I can't really figure out much...

Bu yardımcı olur, JSON veri yapısı biraz bu gibi:

[{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}...

]

9 Cevap

Bu deneyin:

<script>
<?php
echo 'var data = '.$javascriptFriendlyData;
?>
// now the JSON data is stored in the data variable
console.log(data);
</script>

Burada HTML şablonu PHP'nin çalıştığı varsayarak yaşıyorum:

<html>
<head>
<script><?php echo 'var data = '.$javascriptFriendlyData; ?></script>
<script src="some_js_file.js"></script>
</head>
<body>

vs ..

some_js_file.js, şimdi erişebilirsiniz data değişkene.

Açıkladığınız gibi basit bir veri dizisi varsa, orada eval() Bunun için küçük bir sebep olduğunu, ancak yine de düşünebilirsiniz.

Dan the official JSON documentation:

var myObject = eval ('(' + myJSONtext + ')');

Şimdi başka bir Javascript nesnesi gibi kullanabilirsiniz.

Eğer PHP komut json kodlanmış veri oluşturma ve JavaScript yankılanıyordu varsa, hatta bir yerli JavaScript biçiminde zaten çünkü eval aramak zorunda değilsiniz.

Yani kodunuzu alarak ...

$row = array()
while ($row = mysql_fetch_object($result)
{
    $data[] = $row;
}
$javascriptFriendlyData = json_encode($data);

Sonra, senin Javascript kodu gibi bir şey yapabilirim ...

<script type="text/javascript">
var data = <?php echo $javascriptFriendlyData; ?>;
</script>

Sayfa işlenirken sonra, veriler zaten çözümlenir ve kullanıma hazırdır. Eğer değerlendirilmesi gerektiğini veri dönmek AJAX istekleri işleme öyle. Aksi takdirde, hiçbir farklı zaman kullanarak JavaScript gösterimde inline.

örneğin:

<script type="text/javascript">
var somevar = [{objVar1:"SomeVal"},{objVal2:"SomeVal2"}];
</script>

Ayrı bir dosya içinde JavaScript olması için çalışıyoruz eğer JavaScript dosyası yüklemek veya JavaScript PHP tercüman aracılığıyla dosyasını çalıştırmadan önce, o zaman JavaScript bu değişkeni ayarlamak gerekir.

JSON JavaScript verileri için sadece bir gösterim. Hangi JS kodu bu tür anlamına gelir:

var data = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

Sadece data JavaScript değişken verilerinizi koyacağız.


Considering that [] symbolize an array, and {} symbolize an object, you can use this to access the title property of the first element of the data array :

alert(data[0].atitle);

Ve alırsınız

Ameya R. Kadam


And, to loop over each elements of the data array, you can use something like this :

var i;
for (i=0 ; i<data.length ; i++) {
    alert(data[i].aid + ' : ' + data[i].atitle);
}

(Absolutly no need for jQuery for such a task, btw)

Diziniz adında bir değişken ise data:

$.each(data, function(){
  alert(this.aid);
  alert(this.atitle);
});
var arr = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

$.each(arr, function() {
    alert(this.aid)
    alert(this.atitle)
})

Veya

var arr = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

$.each(arr, function(i,o) {
    alert(o.aid)
    alert(o.atitle)
})

Ben JSON.org Json2.js kütüphane JSON JS gidiyor ve geri JS nesneden JSON için gelmek içinde bulduk. Örneğin, yerine:

var obj = eval('(' + jsonString + ')');

JSON.org kütüphane ile kullanın:

var obj = JSON.parse(jsonString);

Ayrıca JSON bir nesne olarak canlandırıldı olmanın sonuçları ile çalışmaya olanak sağlayan ikinci bir parametre belirtebilirsiniz.

Geri JSON dizeye gitmek için sadece çağırır:

var jsonString = JSON.stringify(obj);

Bu aynı zamanda kontrol json dize oluşturulmasına yardımcı olacak isteğe bağlı argüman alır.

JSON basicalle bir Veri Yapıları hakkını gösterir, bu yüzden aslında o yüzden bunu yapmak kullanmak için, bir nesne ya da bir sınıf örneği var:

var MyJSonObject = eval("(" + jSonString + ")");

UPDATE

Amit hey, javascript PHP nesnelerine erişemez. Yapmanız gereken şekilde PHP json dize oluşturmak, ama sonra istemciye yazmak olduğunu. Ben PHP bunu nasıl yapardım emin değilim, ama bu ASP bunu nasıl yaparım. Fikir sözdizimi PHP farklı olacaktır, aynıdır.

<html>
	<head>
		<script type="text/javascript">
			var MyObject = eval("(" + <%= Response.Write(strServerSideVariable) %> + ")");
		</script>
	</head>
	<body>
	</body>
</html>

ASP / etiketleri "<%%>" sunucu tarafını belirtmek değil, istemci tarafında kod .Net unutmayın. Bu PHP Amit ile ilgisi var ne

JSON.parse () ve JSON.stringify (): Bazı tarayıcıların artık JSON çözme ve kodlama için yerli fonksiyonları kümesi sağlamak fazlalaştı. Onlar eval () işlevini kullanarak daha güvenli ve JSON veri iyi biçimli ise sadece eval ise () aşağıdaki gibi bir şeyleri değerlendirmek istiyorsunuz, çalışır:

{
  'hello': (undefined
            ? 'world'
            : ('number ' + Math.floor (40.235)))
}

Bu ne yanlış var? `'Undefined JavaScript değer json (sadece doğru, yanlış, boş, dizeleri ve sayılara izin verilir) mevcut değildir; Sadece çift tırnak JSON geçerli olduğunda tek tırnak her yerde kullanılır; JavaScript işlevleri çağırmak veya JSON dize birleştirme yapamazsınız.

Eğer şeyleri kurcalamak girişiminde bazı kötü niyetli JSON, bir form girişi gelen muhtemelen bir değer alabilir çünkü Açıkçası sonuncusu büyük bir sorundur. Yani mümkün olduğunda, JSON.parse () ve JSON.stringify () kullanın ... eval () tehlikeli çünkü.

Edit:

Ben orijinal yazı oynanırsa. PHP bir JSON nesnesi var ve JavaScript kullanmak istiyorsanız, bir dizeye JSON nesnesi dönüştürmek ve JavaScript üzerinde geçmek gerekir. Bunu yapmak için tek yolu JavaScript kodu aslında ilk etapta yeni oluşturulan json dize isteyin yapmak olacaktır. PHP bir dize dönecekti, JavaScript dize eval () veya JSON.parse () kullanmak istiyorsunuz, ve JavaScript içinde bir nesne olurdu. Content-Type başlığı, vb ayarlayarak, PHP dosyalarının içine JavaScript dosyaları yapmadan bunu yapmak için bir non-AJAX bir yolu varsa ben emin değilim, ama AJAX bu durumda çalışmaz olacağını biliyorum.