2015-06-09 25 views
1

我想通過一個PHP字符串JavaScript,然後用它作爲選項。我正在使用http://masonjs.com/文檔來執行此操作。當我使用data變量時,它不起作用。PHP的字符串梅森JS選項

<script type="text/javascript"> 
    var mason; 
    var size; 
    var data = "<?php echo $this->getSizes($blocks); ?>"; 
    console.log(data); 
    //This contains: [3,2],[2,2] 

    jQuery(function(){ 
     mason = jQuery("#grid").mason({ 
      itemSelector: ".masonblock", 
      ratio: 1.5, 
      sizes:[ 
       data 
      ], 
      columns: [ 
       [0, 480, 6] 
      ], 
      filler: { 
       itemSelector: '.filler', 
       filler_class: 'mason-filler' 
      }, 
      gutter: 5, 
      layout: "fluid" 
     }) 
    }); 
</script> 

數據變量包含[3,2],[2,2]這就是我想實現,但它不工作。但是,如果我從console.log中複製相同的值並將其直接粘貼到大小選項中,它將起作用。

我試着這樣做很好,但它增加了一個雙引號的選項之外:

var data = <?php echo json_encode($this->getSizes($blocks)); ?>; 
//Ends up as: "[3,2],[2,2]" 

看來,它是與作爲選項被傳遞的字符串類型。我應該把這個值作爲一個對象嗎?你能告訴我我做錯了什麼嗎?

我甚至試過JSON.stringify(data);但沒有喜悅。

+0

試試'data = [<?php echo $ this-> getSizes($ blocks); ''並給尺寸選項作爲'尺寸:數據' –

回答

2

嘗試:

var data = JSON.parse("[" + <?php echo json_encode($this->getSizes($blocks)); ?> + "]"); 

「[3,2],[2,2]」 不是有效的JSON字符串。你需要把它放在一個數組中以便JSON.parse()工作。

注意:data將具有值[[3,2],[2,2]]因此您可能需要將sizes: [data]更改爲sizes: data

+0

你能告訴我,如果我把它作爲一個PHP數組如何將其轉換爲尺寸選項? – MagentoMan

+0

@MagentMan當你將數據從PHP傳遞到你正在處理字符串的前端時,你不能傳遞PHP對象。但是,您可以傳遞JSON編碼的PHP對象,然後將它們解碼爲JavaScript對象。所以,在一行代碼大小:JSON.parse(<?php echo json_encode($ your_php_array)?>);'。 – thodic

+0

謝謝!你幫了很多! – MagentoMan

0
var data = JSON.parse(<?php echo json_encode($this->getSizes($blocks)); ?>); 

應該這樣做。雖然考慮的是不好的做法,從PHP

產生JS
0

你使用的插件預計sizes是一個數組。當你寫:

var data = "<?php echo $this->getSizes($blocks); ?>"; 

這將打印爲:

var data = "[3,2],[2,2]"; // Will be a string not an array 

var data = [<?php echo $this->getSizes($blocks); ?>]; // I removed quotes plus added brackets to make it an array 

和你打電話喲插件作爲......

jQuery(function(){ 
    mason = jQuery("#grid").mason({ 
     itemSelector: ".masonblock", 
     ratio: 1.5, 
     sizes: data, 
     ...... 
    }); 
});