POST aracılığıyla Javascript PHP json kodlanmış değişken geçirmeden

2 Cevap php

Ben JSON verileri ayrıştırır bir Javascript ile bir PHP komut dosyası göndermek ve Google Maps üzerinde çizmek istediğiniz bir çok boyutlu bir dizi var. Ben formları kullanarak simüle çalışıyorum:

<?php
$jsontest = array(
	0 => array(
		'plate_no' => 'abc111',
		'longlat' => array(121.003895,14.631563),
		'info' => 'first item'
		),
	1 => array(
		'plate_no' => 'abc222',
		'longlat' => array(121.103895,14.731563),
		'info' => 'second item'
		)
	);
$jsonarray = json_encode($jsontest);
?>
<form action="json-target.php" method="post" accept-charset="utf-8">
        <input type="hidden" name="jsonarray" value="<?php echo $jsonarray; ?>" id="jsonarray">
	<p><input type="submit" value="Continue &rarr;"></p>
</form>

json-target.php bu gibi görünüyor:

<?php
	print "The value of \$_POST is ";
	print_r($_POST);
?>

Ve çıkış $_POST olan Array ( [jsonarray] => [{ ). (Aşağıda güncelleyin bakınız) bir Javascript işlevi $jsonarray değişkenin içeriğini geçmek istedi.

UPDATE: Ben de $_POST alınan değeri ayrıştırmak ve üzerinden değerini göndermek gerekiyor basit bir Javascript var alert():

<script src="/js/json2.js" type="text/javascript" charset="utf-8"></script>	
<script type="text/javascript" charset="utf-8">
	var json = JSON.parse(<?php echo $_POST['jsonarray'] ?>);
	for (var i = 0; i < json.length; i++) { 
		alert(json[i]); 
	 }
</script>

Ama çıkış ters eğik çizgi karakterleri ile karıştırılmış olduğunu.

var json = JSON.parse([{\"plate_no\":\"abc111\",\"longlat\":[121.003895,14.631563],\"info\":\"first item\"},{\"plate_no\":\"abc222\",\"longlat\":[121.103895,14.731563],\"info\":\"second item\"}]);

Bunu yapmanın daha iyi bir yolu nedir?

2 Cevap

JSON kodlama tırnak geniş kullanımı yapar. Sadece HTML value özellik bir json kodlanmış dize çıktısı ile, tırnak biçimlendirme engel olacaktır. Onlar HTML içine koymak için kaçtı gerekir. Bu deneyin:

<input type="hidden" name="jsonarray" value="<?php echo htmlspecialchars($jsonarray,ENT_QUOTES); ?>" id="jsonarray">

Düzenleme: güncelleme yanıt olarak, ben senin JSON.parse yapıyor olması gerekiyordu ne emin değilim. PHP json_encode() ile kodlanmış bir şey teknik olarak geçerli bir JavaScript nesnesidir ve daha fazla ayrıştırılamaz gerekmez. I $obj bir isim özelliği ile adında bir nesne olsaydı 'merhaba', ben bunu:

<script type="text/javascript">
var o = <?php echo json_encode($obj); ?>;
alert(o.name);
</script>

ve bir uyarı 'merhaba' diyerek olsun. Json_encode çıkış gayet uygun bir JavaScript amacıdır.

Lütfen $_POST dizisinin çıkış bölü ile kaçtı edilmiş olması bana belki magic_quotes_gpc direktifi olmak üzere ayarlanmış olduğunu düşünüyorum yol açar. Bu durum buysa, stripslashes() ile $ _POST değişkenleri Unescape gerekecek.

Cevabını bulmak için biraz zaman aldı. Deneyin:

var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>);