ajax的一个问题(困扰了好几天了)

这个问题困扰了好几天了:

我通过ajaxLink打开一段内容,这段内容中,还要嵌入一段ajaxLink的链接,可是,第二层的ajaxLink始终不生效,我看了生成后的网页代码,

<SCRIPT type="text/javascript">

/<![CDATA[/

jQuery(document).ready(function() {

);/]]>/</SCRIPT>

这里只有最开始的那个链接。 而且这段javascript不在我事前定义好的div中,所以我通过replace或者update的方式都不能把这段代码更新。

我应该怎么办呢???

这个是个很麻烦的问题。目前整个js界都没有很好的解决办法。

解决的一个方法是不要用CHtml::ajaxLink,而是自己写:在click link后调用$.getScript(), 从服务器端取回执行一段JS代码。这段JS代码需要显示你希望更新的内容,包括新的ajax link。

我把这段代码

<SCRIPT type="text/javascript">

/<![CDATA[/

jQuery(document).ready(function() {

);/]]>/</SCRIPT>

在新内容中自己硬写进去了,然后把相关的参数更改,结果实现了。

强,不知道这样是否可靠呢?

这也是一种办法。

我写了一个类:

class ECHtml extends CHtml


{


    static public function my_ajaxLink($text, $url, $ajaxOptions=array(), $htmlOptions=array())


    {


	    $url_text=array_shift($url);


	    $ajaxOptions['url']=Yii::app()->createUrl($url_text,$url);


	    $ajax=CHtml::ajax($ajaxOptions);





	    $id='id'.time();


	    if(!empty($htmlOptions))


	    {


		    $keys=array_keys($htmlOptions);


		    foreach($keys as $key)


		    {


		        if(strtolower($key)=='id')


		        {


		            $id=$htmlOptions[$key];


		            $href=CHtml::link($text, '#' ,$htmlOptions);


		            $script='<SCRIPT type="text/javascript">/*<![CDATA[*/jQuery(document).ready(function(){jQuery('#'.$id.'').click(function(){'.$ajax.'return false;});});/*]]>*/</SCRIPT>';


                    return $href.$script;


		        }


		    }


	    }


        $htmlOptions['id']=$id;


        $href=CHtml::link($text, '#' ,$htmlOptions);


        $script='<SCRIPT type="text/javascript">/*<![CDATA[*/jQuery(document).ready(function(){jQuery('#'.$id.'').click(function(){'.$ajax.'return false;});});/*]]>*/</SCRIPT>';


        return $href.$script;


    }


}

这样问题就基本解决了!

可是,既然这样能解决问题,为什么Yii不这样做呢? 一定有什么原因吧?

你这样做只是解决了ajaxLink的问题。这个js问题的形成条件是:ajax response里有和当前页面里同样id的一个元素并且该元素可以触发ajax。所以,其它button或widget都有可能出现类似问题的。

强,你的话我有点没有太理解(我刚开始接触PHP)

我是这样想的,既然ajaxLink可以这样解决,那么ajaxButton也可以,总之就是那段script自己写进去就可以,使用这些的前提是  用户一定要保证 当前页面有相同ID的元素呀!

呵呵,更具体的信息在这里:http://code.google.com/p/yii/issues/detail?id=38

还得深入学习啊! 向“强”致敬! ::)