2013-06-18 66 views
0

我正在面对添加ajax上的记录时出现问题,该记录呈现部分与其他两个ajaxified链接进行编辑和删除。但我得到的错误,jQuery不是一个函数。ajax请求上的脚本问题

通过搜索网络的解决方案,我得到以下。 使第四个参数为true并注册脚本。

$this->renderPartial("_part", array('parms' => $model), false, true); 

而要注册脚本,我在主视图文件中添加了以下行。

<?php Yii::app()->clientScript->registerScript("jquery"); ?> 

而且在图书馆里说。

public CClientScript registerScript(string $id, string $script, integer $position=NULL) 

从上面的一行我得到的ID必须是脚本标记的ID。喜欢; <script id="someid"></script>。但我无法获得第二部分,因为我想注册主页面中脚本标记中的js。

我该怎么做?

+0

为了注册jQuery,你必须使用:'Yii :: app() - > clientScript-> registerCoreScript(“jquery”);' – Ezze

+0

@Ezze仍然是同样的错误。字符串“jquery”是脚本标记的ID吗? –

+0

'registerScript()'函数的第二个参数是一个JavaScript代码,将包含在'script'标记中。如果您想从现有文件注册一些JS代码,您必须使用'CClientScript'的[registerScriptFile()](http://www.yiiframework.com/doc/api/1.1/CClientScript#registerScriptFile-detail)方法。 – Ezze

回答

0

做完renderPartial后,用ajax加载你的内容,你再一次加载你的脚本。

例如,你有一些jQueryUI日期选择器,它不会在渲染部分内工作。即使您将脚本正确注册等,您也需要重新创建对象以使您的小部件能够正常工作。

在渲染零件中加载你的脚本是一个非常糟糕的主意,因为你会有双重加载。然后,您需要从脚本映射中删除脚本,然后用手将它们加载到您的页面上。 因此,加载页面上的所有脚本。补充一点:

`如果(Yii的::应用程序() - >请求 - > getIsAjaxRequest()){

的Yii ::应用程序() - > clientScript->脚本映射[ '* JS。'] =假; Yii :: app() - > clientScript-> scriptMap ['* .css'] = false;};}};}}}}

$这个 - >的RenderPartial( 'someview',阵列()) } `

其实这个工作,但它的效率和坏。

我有类似的问题。我的解决方案很简单。仅在渲染部分留下内容。我的意思是:

第一种情况。例如,您需要一些确认页面以及其他详细信息。因此,在用户点击somwhere之后,您无需事先向他展示此1。在这种情况下,您可以使用render()。它不会导致页面重新加载,你不会有小部件的问题。在页面加载时,您可以显示一些甜美的东西,比如轮子或者鲜奶。

第二种情况。您需要在表单上显示其他字段或其他内容等。在这种情况下,javascript是您的朋友。这里不需要Ajax。

第三种情况。加载一些额外的内容,并保存之前的内容和小部件。在这种情况下,您可能会有像

_______________ 
| Page  | 
|    | 
|Add content | 
|_____________| 

您需要在您的页面中初始化所有脚本和对象。仅加载renderpartial的内容。那就是它的设计。例如编写内容结构,使其隐藏起来,在成功的情况下填充内容并显示给用户。

它真的令人沮丧的问题在yii。但在90%的情况下,你可以通过小的改变避免它。 这里是关于这个问题的线程。 http://www.yiiframework.com/forum/index.php?/topic/10427-ajax-clientscript