使用CI时,怎样才能让JS调用绝对路径?
我的网站是CI做框架,前台用的是jquery,本地开发环境是用XAMPP搭建的。目录结构如下(省略与问题无关的目录):
G:\xampp\htdocs\juyi
├css
├js
│└sale.js
├images
│└no_pic.gif
└system(这个就是CI)
└application
├controllers
│└sale.php
└views
└sale.php
sale.js
--------------------------------------------------------------------
$(function(){
// 用来确认当前的绝对路径
alert(document.location.href);
// 用默认图片来代替缺失图片
$('.community_list img').error(function(){
$(this).attr('src', 'images/no_pic.gif');
});
});
controller的代码比较复杂,就不贴出来了。
现在的情况是:当访问http://localhost/juyi/sale的时候,图片的路径是http://localhost/juyi/images/no_pic.gif;而访问http://localhost/juyi/sale/参数时,图片的路径跟着变成了http://localhost/juyi/sale/参数/no_pic.gif。
我需要的是:无论sale后面的参数怎么变,图片的路径都不会跟着变。目前我是将JS里的代码修改为$(this).attr('src', 'http://localhost/juyi/images/no_pic.gif');
希望大家能提出更好的解决方案。:) 我的方法是用 CI 生成 js 代码来做这件事。 我的方法是用 CI 生成 js 代码来做这件事。
Hex 发表于 2009-7-1 18:00 http://codeigniter.org.cn/forums/images/common/back.gif
不使用js文件,直接将JS代码写在VIEW里吗? apache rewrite之后最好用绝对路径,当然也有其他解决办法,例如数组替换
src=/, src='/, src="/
替换为
src=http://localhost/juyi/, src='http://localhost/juyi/, src="http://localhost/juyi/
以上替换需要扩展CI_Loader实现 apache rewrite之后最好用绝对路径,当然也有其他解决办法,例如数组替换
src=/, src='/, src="/
替换为
src=http://localhost/juyi/, src='http://localhost/juyi/, src="http://localhost/juyi/
以上替换需要扩展C ...
visvoy 发表于 2009-7-1 18:35 http://codeigniter.org.cn/forums/images/common/back.gif
也就是说,这个问题和CI无关,而是rewrite的问题对吧?
visvoy所说的数组替换是怎么个替换法?是JS代码还是PHP代码?能提供个思路吗? 本帖最后由 visvoy 于 2009-7-1 19:08 编辑
用php替换输出的内容,我们可以通用的认为视图文件里面的图片地址皆以斜线“/”开头,
那么,图片的链接形式就几种:src=,href=,url(,background=
每个等号或小括号后面可能直接跟斜线,或者单引号+斜线,或者双引号+斜线,
于是构造source数组:
src=/,src='/,src="/,
href=/,href='/,href="/,
url(/,url('/,url("/,
background=/,background='/,background="/
再构造dest数组:
src=$img_path/,src='$img_path/,src="$img_path/,
href=$img_path/,href='$img_path/,href="$img_path/,
url($img_path/,url('$img_path/,url("$img_path/,
background=$img_path/,background='$img_path/,background="$img_path/
然后str_replace($sourceArray,$destArray,$outputContent)
如何在CI里面获取最后的输出内容并且强暴它呢?
有两个途径,一是扩展CI_Output的某函数,另外是扩展CI_Loader的某函数
具体哪两个函数看一下这两个类的源码和注释吧,懒得找了
ps: js代码替换会造成网页首先显示很多叉叉,然后再出现图片,不够美观,不使用 本帖最后由 visvoy 于 2009-7-1 19:11 编辑
edit: 替换代码嵌进去之后,只需要修改$img_path即可适应路径的变化了 呵呵,我目前的做法是在视图里用 PHP 生成一个全局 js 变量,里面存储当前应用的根 URL,然后再其它 .js 文件中直接使用这个“特殊”的全局变量。目前来看效果非常好。 已经解决了。目前看来效果很不错!
做法是,在view里面的<head></head>里面加入<base href="<?=base_url()?>"/>,JS里面的代码不用改动,仍然使用相对路径就行
$(this).attr('src', 'images/no_pic.gif');
我对整站的代码(包括JS和CSS)都照这个方法修改了一下,运行很正常。 :loveliness: 楼上的方法确实不错 呵呵特此感谢!
页:
[1]
2