JavaScript birçok sunucu tarafı bilgi aktarmak için en iyi yöntem nedir?

5 Cevap php

Ben sayfaları içinde birçok Javascript var diyelim. Şu anda sadece JavaScript değeri başlatmak için bazı Baskı / Echo deyimini kullanarak değişken başlatmak için oldukça kolaydır.

Example: var x = <?php echo('This is a value');?>

Ben ilk işlevi parametre ile tüm değişkenler değer geçebileceği düşündüm ama (biz çok dilli bir web sitesi ve tüm metni sunucusu (BD) vardır) değerleri bir şey var çünkü bu imkansız.

Example : initializeValues(<?php echo('Value1,Value2,Value3,Value...');?>);//JS Method that can be external of the page

Biz external JavaScript dosyasındaki herşeyi taşımak için sayfalardan tüm JavaScript çıkarmak istediğinizde daha fazla sorun geldi. Ya tüm bu değişkenleri başlatmak için iyi bir yol olurdu? Ben belgenin Yüklendiğinde kullanarak JavaScript yöntemlerini bağlarsanız tüm değerleri doldurmak için Print / Echo yöntemi kullanmak mümkün olmayacaktır.

Bu görevi herhangi çözmek için iyi bir desen?

5 Cevap

Çok popüler model JSON biçiminde kullanılmasıdır. Orada bunu üretmek için kütüphaneler, ve Javascript doğrudan tüketir.

Php ile size bazı script etiketleri arasındaki sayfada çıkışı için serileştirebilirsiniz json_encode sonra kullanarak bir ilişkisel dizi oluşturabilirsiniz.

Eğer http://www.php.net/manual/en/function.json-encode.php bakabilirsiniz yapıyor bazı örnekler için

İşte bunu nasıl:


<?php

$foo = array('bar' => 'gork');

?>
<input id='foo' type='hidden' value='<?= json_encode($foo); ?>' />

Sonra istemci tarafı (ben Prototip kullanıyorum):


var foo = $F('foo').jsonParse();
alert(foo.bar);

var x = <?php echo('This is a value');?>

: Er, hayır, bu kadar sona ereceğini

var x = This is a value

(. Sözdizimi hatası) You istiyorum:

var x = <?php echo json_encode('This is a value', JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);?>

PHP 5.3 kaçan HEX_TAG </ dizisi, bir <script> bloğunda görünen ile ilgili sorunları ortadan kaldırır. AMP ve quot kodlama orada " ile sınırlanmış bir öznitelik değerinde kod koyarak bittiğinde hiçbir sorun " ve & karakter veya sağlamak için gerekli bir non-CDATA XHTML komut bloğu. Sen sadece bir HTML komut dosyası bloğu (veya XHTML CDATA komut bloğu) kullanıyorsanız (onlar da hiçbir zarar rağmen) onlar olmadan uzak alabilirsiniz.

json_encode de mutlu, bir JS değişken bir dize sadece koymak için bir değerler dizisi kodlar.

More problem come when we want to take off all JavaScript from pages to move everything on external JavaScript file.

Bu harici bir JavaScript dosyası, olay dinleyicilerine üzerine bağlanan kodu da dahil olmak üzere, tüm statik kod koymak için iyi bir fikirdir. Ancak sayfa başı veriler hala belgenin kendisi uygun nitelikleri ya, sayfada kalmak gerekir ya da başka bir kod ile basit bir <script type="text/javascript">var data= ...;</script> bloğunda (göze batmayan komut dosyası için örneğin sınıf isimleri).

en iyi uygulama? istemci tarafı js sunucudan değerleri geçen bir tekil iyi uygulama için çok kırılgandır.

Diyelim ki Smarty kullanımı diyelim. sonra, my en iyi uygulamadır:

<script type="text/javascript">
var limit = Number("{$limit}");
var msg = "{$msg}";

{literal}
// code using the variables
{/literal}
</script>

ama ben de çok mantıklı bir yaklaşım olarak görebilirsiniz:

function to_js_vars(arrray $jsvars)
{
    foreach ($jsvars as $name => $info) {
        printf(
            "var %s = %s("%s");\n"
          , $name
          , $info['type']
          , $info['val']
        );
    }
}

burada $info['type'] Number biri, Boolean, ve '' (boş dize) her şey için