Jun 28, 2012

Solution to ubuntu 12.04 sqlite missing

Yesterday I upgrade Ubuntu on my PC in office from 11.10 to 12.04, everything seemed ok.
However, unfortunately, this morning when I tried to clean cache of a symfony project, it reported a Fatal error:

PHP Fatal error:  Class 'SQLiteDatabase' not found in /home/htsg/workspace/esr-momentum/lib/vendor/symfony/lib/cache/sfSQLiteCache.class.php on line 166

After searching online,  I found that 12.04 uses sqlite3 as default, and doesn't install sqlite any more.

I tried a solution which install obsoleted lib via pecl, but failed when did make.
So I had to try another way:
1. downloaded a old version sqlite package from http://packages.ubuntu.com/natty-updates/php5-sqlite
2. extracted the deb file, found the sqlite.so file, copy it to /usr/lib/php5/20090626
3. change the file privilege to root:root
4. create a new configure file sqlite.ini in /etc/php5/conf.d, whose content is
    extension=sqlite.so
5. sudo service apache2 restart

done.

Jun 14, 2012

解决Ajax调用前后页面提示在IE和Chrome中不显示的问题 (solution to indicator wont appear during Ajax call on IE and Chrome)

开发一个页面,页面中的部分内容采用Ajax更新,在Ajax调用前,向页面中添加信息载入提示信息(一个旋转的动画图标),在Ajax调用后,从页面中除去该提示信息。流程如下:

添加提示 >> Ajax调用 >> 除去提示

在开发过程中发现,如果Ajax调用采用异步方式,调用时FF浏览器中不会出现提示,因为添加和除去提示的动作都与Ajax调用异步执行了,也就是说,没等Ajax调用完成,除去提示的语句就被执行了。因此尝试将Ajax调用方式改为同步(其实这是不好的),结果在FF中达到了预期的效果。

然而换到IE和Chrome中,提示依然不出现。经过调研,发现这是因为:同步调用的Ajax,在IE和Chrome中都会阻塞调用前的DOM更新(http://bugs.jquery.com/ticket/7464,http://bugs.jquery.com/ticket/8819)。尝试用setTimeout函数调用Ajax,依然不能解决问题。

继续调研,最终找到了解决方案:
1. Ajax调用方式设置为异步
2. 把添加提示和除去提示从Ajax调用语句的前后,分别转移到Ajax调用内的beforeSend和complete属性的函数中去
流程如下:


$.ajax({
            type : 'POST',
            url : url,
            async : true,
            beforeSend : function() {
             添加提示
            },
            complete : function() {
             除去提示
            },
            success : function(data) {
              ....
            }
          });


这样一来,把提示信息的处理交给了jQuery的.ajax函数,问题得到解决。

参考链接:
http://stackoverflow.com/questions/2227397/jquery-ajax-beforesend-and-complete-working-properly-on-firefox-but-not-on-ie8
http://stackoverflow.com/questions/5182466/ajax-requests-on-chrome-using-jquery-freezes-page-untill-they-all-complete

IE7中z-index相关问题解决办法 (z-index problem on IE7 solution)

开发一个页面,页面中有两个临近的元素,上边的是一个导航下拉菜单,下边的是一个jquery-ui的slider。在FF和Chrome中都可正常显示,但是在IE7中,本应被下拉菜单遮住的slider反而出现在菜单的前面。

这是由于一个IE7的bug:“In Internet Explorer positioned elements generate a new stacking context, starting with a z-index value of 0. Therefore z-index doesn’t work correctly”,所以IE7不能正确处理不同的设置了position属性的页面元素下的子元素的z-index顺序,常常导致z-index序号大的子元素反而被另一页面元素下z-index序号小的子元素所覆盖。

一种解决办法是:设置z-index序号大的子元素的父元素的z-index属性,赋一个更大的序号。这个办法解决了上面提到的导航下拉菜单和slider在IE7中的显示问题。至于为什么有效,不知其所以然。。。

参考于这篇博文:http://brenelz.com/blog/squish-the-internet-explorer-z-index-bug/