据我所知,你可以将你的$(document).ready()代码放入html的单独文件中,但是作为我的javascript的一部分,我使用了一些回调到codeigniter PHP函数的函数,例如site_url()在单独的.js文件的一部分工作。
以下是一个例子:
login_page.php
<script type="text/javascript" src="<?php echo site_url('scripts') . '/' . 'app/login_page.js'; ?>"></script>
<div id="loginForm" class="prepend-2 column span-21">
<p class="tips"></p>
<div class="column span-10">
<dl>
<dt><label>Email:</label></dt>
<dd><input type="text" name="email" id="email" class="text" /></dd>
</dl>
</div>
<div class="column span-10 last">
<dl>
<dt><label>Password:</label></dt>
<dd><input type="password" name="password" id="password" class="text" /></dd>
</dl>
</div>
<div class="column prepend-7 span-10 append-5 ">
<dl>
<dt><label> </label></dt>
<dd><input type="submit" value="Login" id="loginButton" /></dd>
</dl>
</div>
</div>
login_page.js
$(document).ready(
function()
{
//login
$("#password").keyup(function(event){ if(event.keyCode == 13){ $("#loginButton").click();}}); //submit on enter key
$('#loginButton').click(function()
{
do_login($("#email"), $("#password"), $(".tips"), "<?php echo site_url('dashboard'); ?>", "<?php echo site_url('login/log_in'); ?>");
return false;
});
});
所以这里的问题是在do_login我试图调用PHP site_url,但它显然不起作用。如果我在我的php内联中使用javascript但这会使文件相当大并且我更喜欢单独的文件,这一切都正常。
我需要知道的是,这甚至可能吗?如果是这样,有没有人想出这个问题的优雅解决方案?
答案 0 :(得分:1)
您可以将base_url定义为JS全局变量,或者更好地使用login_page.php
中稍后可能需要的所有URL声明JS全局对象,然后再包括login_page.js
。然后它们将位于一个单独的容器中,并且可以在声明之后加载的任何JS代码中提供,内联或外部。
<script type="text/javascript">
window.URLS = {
"BASE_URL" : "<?php echo site_url(....); ?>",
"LOGIN_URL" : "<?php echo site_url(....); ?>",
"DASHBOARD_URL" : "<?php echo site_url(....); ?>",
};
</script>
然后在login_page.js
中使用
do_login($("#email"),
$("#password"),
$(".tips"),
URLS.DASHBOARD_URL,
URLS.LOGIN_URL);
答案 1 :(得分:0)
最简单的方法是在HTML中定义一个JS变量 - JS文件使用它。
<script type="text/javascript">
_Base_URL = "<?php echo base_url();?>";
</script>
然后在你的JS中
do_login($("#email"), $("#password"), $(".tips"), (_Base_URL+"dashboard"), (_Base_URL+"login/log_in) ");