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.