关于ajax请求的脚本问题

时间:2013-06-18 10:18:27

标签: php yii

我在ajax上添加记录时遇到问题,该记录使用其他两个用于编辑和删除的ajaxified链接进行部分渲染。但我得到的错误是jquery不是函数。

通过在网上搜索解决方案,我得到了以下内容。 将第四个参数设为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。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

执行renderPartial并使用ajax加载内容后,再次加载脚本。

例如,你有一些jQueryUI datepicker,它不会在渲染部分内部工作。即使您正确地注册脚本等,您也需要重新启动对象以使小部件正常工作。

将脚本加载到渲染部分非常糟糕,因为你会有双重负载。然后,您需要从脚本地图中删除脚本,并用手加载页面。 因此,请在页面上加载所有脚本。加上这个:

`if(Yii :: app() - &gt; request-&gt; getIsAjaxRequest()){

Yii :: app() - &gt; clientScript-&gt; scriptMap ['*。js'] = false;

Yii :: app() - &gt; clientScript-&gt; scriptMap ['*。css'] = false;

$这 - &GT;的RenderPartial( 'someview',阵列()) } `

实际上这有效,但效率很高。

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

第一个案例。例如,您需要一些包含其他详细信息的确认页面。因此,在用户单击somwhere后,您将显示此1,而不是之前的。在这种情况下,您可以使用render()。它不会导致页面重新加载,你不会遇到小部件问题。在页面加载时,您可以显示像wheel或smthing一样甜蜜的东西。

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

第3例。加载一些额外的内容,同时保存上一个和小部件。在这种情况下,您可能会有像

这样的结构
_______________
| Page        |
|             |
|Add content  |
|_____________|

您需要在页面中初始化所有脚本和对象。仅加载renderpartial的内容。这就是它的设计目标。例如,写内容的结构,使其隐藏,在成功时用内容填充它并向用户显示。

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