2013-12-23 12 views
2

我目前有一個網站在服務器上使用PHP(Laravel),在客戶端使用Javascript。 現在我想用Dart替換Javascript。如何在Dart中包含PHP生成的數據(無Ajax)

在當前網頁,我注入一些數據的JavaScript這樣的:

<script> 
    var mydata = <?php echo $mydata; ?>; 
    /* now do something with mydata */ 
</script> 

我的問題是:我怎麼重寫這個使用DART?

我先取是:

<script type="application/dart"> 
    main() { 
     var mydata = <?php echo $mydata; ?> 
     /* now do something with mydata */ 
    } 
</script> 

但是,這種方法使得它不可能產生與dart2js Javascript代碼,因爲那裏是動態生成包含在DoubleClick代碼的代碼。

我當然可以使用Ajax請求,但我選擇將生成的數據放在Javascript代碼中,因爲這會減少一個HTTP請求,使網頁加載速度更快。

那麼我怎麼會去注入PHP生成的數據到達特,而不使用HTTP請求,同時仍然能夠使用dart2js?

+1

另一個改善加載時間的方法是爲您的json數據添加一個預取標記:然後,當您發出ajax請求時,數據可能已經擁有了已被下載。 –

+0

Greg很有趣,我沒有人能做到這一點。它仍然是一個額外的HTTP請求,我想立即使用這些數據,所以在我的情況下,我不認爲它是一個解決方案。 –

回答

2

最簡單的解決方案是用JS生成數據,就像你已經做的那樣,並且從Dart用dart:js來讀取它們。因此,您只需要一次編譯dart2js

在你file.php

<script> 
    var myDatasAsJsonString = "<?php echo $myDatasAsJsonString; ?>"; 
</script> 

在DART文件:

import 'dart:js' as js; 
import 'dart:convert' show JSON; 

main() { 
    final myDatasAsJsonString = js.context['myDatasAsJsonString']; 
    final myDatasAsJson = JSON.decode(myDatasAsJsonString); 
    /* now do something with mydata */ 
} 
+0

非常感謝!這看起來像一個可行的解決方案。我下班回家後儘快嘗試。一個'純粹'的飛鏢解決方案可能會更優雅,但這肯定會對我有用。 –

+0

我試了一下,它的工作原理! –

2

我自己的問題的另一個解決方案是這樣的:

<script type="application/json" id="json-data"> 
    <?php echo json_encode($myData); ?> 
</script> 

,並導入此在Dart中:

void main() { 
    var myData = JSON.decode(querySelector('#json-data').text); 
} 
相關問題