Preface

因為網站需求 想找看看有沒有可以把 PHP 中的變數傳給 …

Preface

因為網站需求 想找看看有沒有可以把 PHP 中的變數傳給 JavaScript 使用的方法

主要是因為 URL 不想像之前一樣是寫死在 JavaScript 裡面

不然之後 URL routing 又改的話 又得重新修改 實在很麻煩

想用 Yii::app()->createAbsoluteUrl(''); 生成該頁面的網址之後

再丟給 JavaScript

這樣就不用把網址寫死在裡面

其實找了有點久 好像沒找比較好的解法

Solution

所以最後用了 stackoverflow 上的這篇 中最底下的回覆

但裡面的寫法有一點點小錯誤

Yii::app()->clientScript->registerScript("myVarList",  
    'myVarList = jQuery.parseJSON('.CJSON::encode($myVarList).');'  

小括號的內層必須再多一對單引號

不然 jQuery.parseJSON 會出錯

所以最後寫的 Code 長這樣

<?php  
$myVar = ['url' => Yii::app()->createAbsoluteUrl($this->module->id.'/default/list/json/1')];  
?>  

<?php  
Yii::app()->clientScript->registerScript('', "myVar = jQuery.parseJSON('".CJSON::encode($myVar)."');\n" . <<<EOD  
function updateList(name)  
{  
    $('#company-list').html($('#loading-tmpl').text());  
    $.getJSON(myVar.url + (name !== null ? ('/name/' + name) : ''), function (data) {  
        $('#company-list').empty();  
        $('#company-tmpl').tmpl(data).appendTo('#company-list');  
    });  
}  

...  
?>  

在 JavaScript 中,可以透過 myVar.url 順利拿到 URL

Appendix

<<<EOD  
...  
EOD;  

此種寫法在 PHP 中稱為 HEREDOC

A third way to delimit strings is the heredoc syntax: <<<.
After this operator, an identifier is provided, then a newline.
The string itself follows, and then the same identifier again to close the quotation.

詳見官方說明 PHP - HEREDOC syntax


References


Share


Donation

如果覺得這篇文章對你有幫助, 除了留言讓我知道外, 或許也可以考慮請我喝杯咖啡, 不論金額多寡我都會非常感激且能鼓勵我繼續寫出對你有幫助的文章。

If this blog post happens to be helpful to you, besides of leaving a reply, you may consider buy me a cup of coffee to support me. It would help me write more articles helpful to you in the future and I would really appreciate it.


Related Posts